USING: sequences kernel arrays strings math.parser math
math.ranges io splitting ;
IN: kaprekar
: cleave-at ( str n -- seq ) cut-slice [ >string ] bi@ 2array ;
: all-cleaves ( str -- seq ) [ length 1 - ] [ ] bi [ ] curry
replicate [ 1 ] [ length ] bi [a,b] [ cleave-at ] 2map ;
: filter-zeroes ( seq -- seq ) [ [ string>number ] map ] map
[ 0 swap member? not ] filter ;
: kaprekar? ( n -- ? ) dup sq number>string
all-cleaves filter-zeroes [ sum ] map member? ;
: main ( -- ) lines [ " " split [ string>number ] map [ first ]
[ second ] bi [a,b] [ kaprekar? ] filter >array
[ bl ] [ number>string write ] interleave nl ] each ;
MAIN: main
VVNJTkc6IHNlcXVlbmNlcyBrZXJuZWwgYXJyYXlzIHN0cmluZ3MgbWF0aC5wYXJzZXIgbWF0aAogICAgbWF0aC5yYW5nZXMgaW8gc3BsaXR0aW5nIDsKSU46IGthcHJla2FyCgo6IGNsZWF2ZS1hdCAoIHN0ciBuIC0tIHNlcSApIGN1dC1zbGljZSBbID5zdHJpbmcgXSBiaUAgMmFycmF5IDsKCjogYWxsLWNsZWF2ZXMgKCBzdHIgLS0gc2VxICkgWyBsZW5ndGggMSAtIF0gWyBdIGJpIFsgXSBjdXJyeQogICAgcmVwbGljYXRlIFsgMSBdIFsgbGVuZ3RoIF0gYmkgW2EsYl0gWyBjbGVhdmUtYXQgXSAybWFwIDsKICAgIAo6IGZpbHRlci16ZXJvZXMgKCBzZXEgLS0gc2VxICkgWyBbIHN0cmluZz5udW1iZXIgXSBtYXAgXSBtYXAKICAgIFsgMCBzd2FwIG1lbWJlcj8gbm90IF0gZmlsdGVyIDsKICAgIAo6IGthcHJla2FyPyAoIG4gLS0gPyApIGR1cCBzcSBudW1iZXI+c3RyaW5nCiAgICBhbGwtY2xlYXZlcyBmaWx0ZXItemVyb2VzIFsgc3VtIF0gbWFwIG1lbWJlcj8gOwogICAgCjogbWFpbiAoIC0tICkgbGluZXMgWyAiICIgc3BsaXQgWyBzdHJpbmc+bnVtYmVyIF0gbWFwIFsgZmlyc3QgXQogICAgWyBzZWNvbmQgXSBiaSBbYSxiXSBbIGthcHJla2FyPyBdIGZpbHRlciA+YXJyYXkKICAgIFsgYmwgXSBbIG51bWJlcj5zdHJpbmcgd3JpdGUgXSBpbnRlcmxlYXZlIG5sIF0gZWFjaCA7CgpNQUlOOiBtYWlu