/ atw, sa - parse categories / categories N:"abcdefghijklmnopqrstuvwxyz0123456789" / nouns V:":+-*%&|<>=~.!@?#_^,$ABCDEFGHIJKLMNOPQRSTUVWXYZ" / verbs A:"'/\\" / adverbs s:{,/|(0;m[x;#y])_y} / rotate m:{x-y*x div y} / mod / type T:{" ()nva"@+/(!6)*(*:'x)in/:(+," ()"),(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++0N 2#1_&~1==':~z,0)(*_)\:x]@&~z;x]} r:{m[_x%M]3} / rank i:{x-M*a[s[1]x]&v x} / preprocess v a j:{x@\:&~3=*x} / no blanks p:{s[-1]0<+\1 -1 0@2&*:'x} / parens a:{M<2+m[*:'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:0 1000/: / encode value + position C:1000\: / 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:-4!x))} / evaluate from (reverse) polish E:{**{f[*x;*x 1]. 1_x 1}/(();@[x;1+!3;|:])} e:{`$z," error\n",x,"\n",(- y+1)$,"^"} f:{[z;x;p;v;i]$[~#p;(z;(x;p;v;i));~*v;(z,,g@*p;(,x),1_'(p;v;i));((w _z),,.[g@*p;|(w:-*v)#z;e[x;*i]];(,x),1_'(p;v;i))]} g:{({x'y};{x/y};{x\y};{x':y};{y x/:z};{y x\:z};. x)("",/:("'";"/";"\\";"':";"/:";"\\:"))?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" x:!10;E P"+/x"