28 lines
638 B
Text
28 lines
638 B
Text
go =>
|
|
S = "Big fjords vex quick waltz nymph!",
|
|
println(S),
|
|
println(rot13(S)),
|
|
println(rot13(rot13(S))),
|
|
nl.
|
|
|
|
% Rot 13 using a map
|
|
rot13(S) = S2 =>
|
|
lower(Lower),
|
|
upper(Upper),
|
|
M = create_map(Lower, Upper),
|
|
% If a char is not in a..zA..z then show it as it is.
|
|
S2 := [M.get(C,C) : C in S].
|
|
|
|
create_map(Lower, Upper) = M =>
|
|
M = new_map(),
|
|
Len = Lower.length,
|
|
LDiv := Lower.length div 2,
|
|
foreach(I in 1..Len)
|
|
II = (LDiv+I) mod Len,
|
|
if II == 0 then II := Len end,
|
|
M.put(Upper[I],Upper[II]),
|
|
M.put(Lower[I],Lower[II])
|
|
end.
|
|
|
|
lower("abcdefghijklmnopqrstuvwxyz").
|
|
upper("ABCDEFGHIJKLMNOPQRSTUVWXYZ").
|