97 lines
2.5 KiB
Text
97 lines
2.5 KiB
Text
[ $ "" 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$
|