RosettaCodeData/Task/Rot-13/Picat/rot-13.picat
2023-07-01 13:44:08 -04:00

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").