[ $ "" swap witheach [ upper dup char I > if [ 1 - ] dup char A char Z within iff [ char A - join ] else drop ] ] is ->0..24 ( $ --> [ ) [ $ "" swap witheach [ char A + dup char I > if 1+ join ] ] is ->A..Z ( [ --> $ ) [ [] 5 times [ dip ->0..24 join ] ] is makesquare ( $ $ $ $ $ --> [ ) [ dup witheach [ i^ unrot poke ] ] is makeindex ( [ --> [ ) [ dup temp put makeindex temp put ->0..24 [] swap witheach [ temp share swap peek 5 /mod join nested join ] temp release transpose unpack join [] swap dup size 2 / times [ 2 split dip [ nested join ] ] drop $ "" swap witheach [ unpack swap 5 * + temp share swap peek join ] ->A..Z temp release ] is encrypt ( $ [ --> $ ) [ dup temp put makeindex temp put ->0..24 [] swap witheach [ temp share swap peek 5 /mod join join ] temp release dup size 2 / split 2 pack transpose [] swap witheach [ unpack swap 5 * + temp share swap peek join ] ->A..Z temp release ] is decrypt ( $ [ --> $ ) [ $ "ABCDE" $ "FGHIK" $ "LMNOP" $ "QRSTU" $ "VWXYZ" makesquare ] constant is tasksquare ( --> [ ) [ $ "BGWKZ" $ "QPNDS" $ "IOAXE" $ "FCLUM" $ "THYVR" makesquare ] constant is wikisquare ( --> [ ) [ $ "QUACK" $ "DEPTH" $ "LYING" $ "FORMS" $ "BVWXZ" makesquare ] constant is ducksquare ( --> [ ) say "Using tasksquare:" cr $ "Attack at dawn." dup echo$ say " -> " tasksquare encrypt dup echo$ say " -> " tasksquare decrypt echo$ cr cr say "Using wikisquare:" cr $ "Flee at once." dup echo$ say " -> " wikisquare encrypt dup echo$ say " -> " wikisquare decrypt echo$ cr cr say "Using ducksquare:" cr $ "The invasion will start on the first of January." dup echo$ cr say " -> " ducksquare encrypt dup echo$ cr say " -> " ducksquare decrypt echo$