/ 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} / upper-case 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 / test C:g[!N]"cryptonomicon" E:e[C] D:d[C] D E"this is a string"