/ solitaire: http://www.schneier.com/solitaire.html / card data: N:1+B:1+A:52 / count, jokers J[`A`B]:1 2{,/@[!N;(y+x)!N;,;y]_di y}'\:!N / joker matrices / solitaire algorithm: h:{x[z;k[y]@#z]!26} / data +|- keystream k:{p'1_ y((~A>p@)s/s@)\x} / keystream a:{x J.A x?A} / move joker A b:{x J.B x?B} / move joker B t:{,/|(0,0 1+{x@64)&x<91}x-32*(x>96)&x<123} / letters -> upper i:-65+u@_ic / char -> int o:_ci 65+ / int -> char / entry points: e:{m o h[+;x]i v y} / encrypt d:{o h[-;x]i@,/y} / decrypt g:{{r[s x;y]}/[x;i y]} / generate deck / gui: S:"solitaire" / test string K:"cryptonomicon" / key string C..d:"g[!N]K" / keyed deck E..d:"e[C]S" / encrypted S D..d:"d[C]E" / decrypted E .k..l:"solitaire in k" / label .k..a:`S`K`D`E / arrangement .k..c:`form / class `show$`.k / display