так что пишу небольшие всякие программки на erlang для освоения конструкций, например программка для решения эстонской задачки из предыдущих постов выглядит у меня следующим образом (понятно что это на скорую руку и не для продакшена)
-module(test).
-export([decodeestonian/0).
decodeestonian()-> Text = [129, 146, 153, 74, 147, 157, 74, 158, 146, 143, 74, 139, 159, 158, 146, 153, 156, 74, 153, 144,
74, 76, 126, 146, 143, 74, 114, 147, 158, 141, 146, 146, 147, 149, 143, 156, 81, 157, 74, 113,
159, 147, 142, 143, 74, 158, 153, 74, 158, 146, 143, 74, 113, 139, 150, 139, 162, 163, 76, 105,
74, 122, 150, 143, 139, 157, 143, 74, 157, 143, 152, 142, 74, 163, 153, 159, 156, 74, 139, 152,
157, 161, 143, 156, 74, 158, 153, 74, 148, 153, 140, 157, 106, 151, 153, 153, 152, 141, 139, 157,
141, 139, 142, 143, 88, 141, 153, 151, 86, 74, 161, 147, 158, 146, 74, 163, 153, 159, 156, 74,
109, 128, 74, 153, 156, 74, 118, 147, 152, 149, 143, 142, 115, 152, 74, 127, 124, 118, 88, 52], decode(256,Text).
decode(Shift,Text) -> case Shift of
0 -> {0,'end'};
_ -> Shifted = rottext1(Text), NextShift = Shift-1, {{Total, En, Sp}, Decoded} = Shifted,
if
En / Total > 0.01, Sp > 5 -> io:format("~n~p/~p: ~s~n",[Total,En,Decoded]);
true -> io:format(".",[])
end,
decode(NextShift,Decoded)
end.
rottext1(Encoded) -> Shifted = rot1(Encoded), Stat = calculate_e(Shifted), {Stat,Shifted}.
rot1(Encoded) -> [ (X+1) band 255 || X <- Encoded].
calculate_e(Text) -> case Text of
[] -> {0,0,0};
[C | Tail] -> case C of
$e -> {Total,En,Sp} = calculate_e(Tail), {Total+1,En+1,Sp};
$E -> {Total,En,Sp} = calculate_e(Tail), {Total+1,En+1,Sp};
32 -> {Total,En,Sp} = calculate_e(Tail), {Total+1,En,Sp+1};
_ -> {Total,En,Sp} = calculate_e(Tail), {Total+1,En,Sp}
end
end.
Tags: erlang