/ atw, sa - parse categories / categories N:"abcdefghijklmnopqrstuvwxyz0123456789" / nouns V:":+-*%&|<>=~.!@?#_^,$ABCDEFGHIJKLMNOPQRSTUVWXYZ" / verbs A:"'/\\" / adverbs / words W:{m@,/l'(&1(~=)':+/(1+!#a)*n[x]_lin/:a:(0 26_ N))_ x} / tokenize l:{:[" "=*x;"";(*x)_in"()",V,A;+,x;,x]} / ++ -> + + m:{j:":"=a:*:'x;k:a _lin A,26#V;@[x;&k&1!j;,;":"]_di&j&-1!k} / A|V : -> A|V: n:{@[x;&(x=".")&&/-1 1!\:x _lin 26#N;:;"x"]} / N.N -> NxN / type T:{" ()nva"@+/(!6)*(*:'x)_lin/:(+," ()"),(N;V;A)} / x -> " ()nva" / universe M:_.2*#U:,/("()a";" va";" va";" n ";" n ") / types & magic number / reduce R:{:[|/z@:C[x]0;@[x;*i;:;y'(+i:-1 0++-1 2#&~1=':~z,0)(*_)\:x]@&~z;x]} r:{(_ x%M)!3} / rank i:{x-M*a[1!x]&v x} / preprocess v a j:{x@\:&~3=*x} / no blanks p:{-1!0<+\1 -1 0@2&*:'x} / parens a:{M<2+(*:'x)!M} / adverbs (will swap) v:{0':v@ / first verbs Y:{c[3 0],k -1_1_ x} / (x)-> k x X:{c C[i]+(M*~!#i:,/|x;0)} / xy->yx k:{,/R/[x;(Y;X;X);(p;a;b)]} / raze reduce over c:1000 _sv / encode value + position C:1000 _vs / decode value + position / parse P:{(x;((,""),w)p;(!4)a[d]+r d:*e;-1+p:*|e:j C k c(i U?/:t;1+!#t:T w:W x))} P"a+/:\\::b" P"a+0" P"abc" P"(a+b)" P"+a" P"x*:/y" P"+((x+y)*z)" P"y@x+*:/'-x*/y" P"(a+b)*-c%d" P"v-(x+y)-((z-k)+w)*a"