RosettaCodeData/Task/Caesar-cipher/Zonnon/caesar-cipher.zonnon

58 lines
1.4 KiB
Text
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
module Caesar;
const
2026-02-01 16:33:20 -08:00
size = 25;
2023-07-01 11:58:00 -04:00
type
2026-02-01 16:33:20 -08:00
Operation = (code,decode);
2023-07-01 11:58:00 -04:00
procedure C_D(s:string;k:integer;op: Operation): string;
var
2026-02-01 16:33:20 -08:00
i,key: integer;
resp: string;
n,c: char;
2023-07-01 11:58:00 -04:00
begin
2026-02-01 16:33:20 -08:00
resp := "";
if op = Operation.decode then key := k else key := (26 - k) end;
for i := 0 to len(s) - 1 do
c := cap(s[i]);
if (c >= 'A') & (c <= 'Z') then
resp := resp +
string(char(integer('A') + ((integer(c) - integer('A') + key )) mod 26));
else
resp := resp + string(c)
end;
end;
return resp
2023-07-01 11:58:00 -04:00
end C_D;
procedure {public} Cipher(s:string;k:integer):string;
var
2026-02-01 16:33:20 -08:00
i: integer;
resp: string;
n,c: char;
2023-07-01 11:58:00 -04:00
begin
2026-02-01 16:33:20 -08:00
return C_D(s,k,Operation.code)
2023-07-01 11:58:00 -04:00
end Cipher;
procedure {public} Decipher(s:string;k:integer):string;
var
2026-02-01 16:33:20 -08:00
i: integer;
resp: string;
n,c: char;
2023-07-01 11:58:00 -04:00
begin
2026-02-01 16:33:20 -08:00
return C_D(s,k,Operation.decode)
2023-07-01 11:58:00 -04:00
end Decipher;
var
2026-02-01 16:33:20 -08:00
txt,cipher,decipher: string;
2023-07-01 11:58:00 -04:00
begin
2026-02-01 16:33:20 -08:00
txt := "HI";cipher := Caesar.Cipher(txt,2);decipher := Caesar.Decipher(cipher,2);
writeln(txt," -c-> ",cipher," -d-> ",decipher);
txt := "ZA";cipher := Caesar.Cipher(txt,2);decipher := Caesar.Decipher(cipher,2);
writeln(txt," -c-> ",cipher," -d-> ",decipher);
txt := "The five boxing wizards jump quickly";
cipher := Caesar.Cipher(txt,2);decipher := Caesar.Decipher(cipher,2);
writeln(txt," -c-> ",cipher," -d-> ",decipher)
2023-07-01 11:58:00 -04:00
end Caesar.