(defun calculate-kaprekar (index expt-number)
(cond
((= (length (prin1-to-string expt-number)) index) 0)
((= (parse-integer (subseq (prin1-to-string expt-number) index)) 0 ) 0)
(t (+ (parse-integer (subseq (prin1-to-string expt-number) 0 index))
(parse-integer (subseq (prin1-to-string expt-number) index)))
))
)
;Calculate if the input is a kaprekar number
(defun kaprekar (num &optional index expt-number)
(cond ( (and (numberp expt-number) (numberp index))
(let ((sum (calculate-kaprekar index expt-number)))
(cond
((= num 1) "S")
((= num sum) "S")
((zerop sum) "N")
(t (kaprekar num (+ 1 index) expt-number))
)
)
)
(t
(let ((x (expt num 2)))
(kaprekar num 1 x)
)
)
)
)
(defun main ()
(let ((kaprekar-values '()))
(loop
(let ((line (read-line)))
(when (string= line "0")
;(format t "~%~%Saida:~%")
(mapcar #'(lambda (x) (format t "~a: ~a~%" (car x) (cadr x))) (reverse kaprekar-values))
;(format t "~%~%bye~%")
(return))
(push (list line (kaprekar (parse-integer line))) kaprekar-values)
)
)
)
)
KGRlZnVuIGNhbGN1bGF0ZS1rYXByZWthciAoaW5kZXggZXhwdC1udW1iZXIpCiAgIChjb25kIAogICAgICAgICAgKCg9IChsZW5ndGggKHByaW4xLXRvLXN0cmluZyBleHB0LW51bWJlcikpIGluZGV4KSAwKQogICAgICAgICAgKCg9IChwYXJzZS1pbnRlZ2VyIChzdWJzZXEgKHByaW4xLXRvLXN0cmluZyBleHB0LW51bWJlcikgaW5kZXgpKSAwICkgMCkKCiAgICAgICAgICAodCAoKyAocGFyc2UtaW50ZWdlciAoc3Vic2VxIChwcmluMS10by1zdHJpbmcgZXhwdC1udW1iZXIpIDAgaW5kZXgpKQogICAgICAgICAgICAgICAocGFyc2UtaW50ZWdlciAoc3Vic2VxIChwcmluMS10by1zdHJpbmcgZXhwdC1udW1iZXIpIGluZGV4KSkpCiAgICAgICAgICApKQoKKQoKO0NhbGN1bGF0ZSBpZiB0aGUgaW5wdXQgaXMgYSBrYXByZWthciBudW1iZXIKKGRlZnVuIGthcHJla2FyIChudW0gJm9wdGlvbmFsIGluZGV4IGV4cHQtbnVtYmVyKQogICAgKGNvbmQgKCAoYW5kIChudW1iZXJwIGV4cHQtbnVtYmVyKSAobnVtYmVycCBpbmRleCkpCiAgICAgICAgICAgICAobGV0ICgoc3VtIChjYWxjdWxhdGUta2FwcmVrYXIgaW5kZXggZXhwdC1udW1iZXIpKSkKICAgICAgICAgICAgICAgIChjb25kIAogICAgICAgICAgICAgICAgICAgICAgICgoPSBudW0gMSkgICAiUyIpCiAgICAgICAgICAgICAgICAgICAgICAgKCg9IG51bSBzdW0pICJTIikKICAgICAgICAgICAgICAgICAgICAgICAoKHplcm9wIHN1bSkgIk4iKQogICAgICAgICAgICAgICAgICAgICAgICh0IChrYXByZWthciBudW0gKCsgMSBpbmRleCkgZXhwdC1udW1iZXIpKQogICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgCgogICAgICAgICAgICAgKQogICAgICAgICAgICkKICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAodCAKICAgICAgICAgICAgICAgIChsZXQgKCh4IChleHB0IG51bSAyKSkpCiAgICAgICAgICAgICAgICAgICAoa2FwcmVrYXIgbnVtIDEgeCkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICApCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAKICAgICkKCikKCihkZWZ1biBtYWluICgpCiAgKGxldCAoKGthcHJla2FyLXZhbHVlcyAnKCkpKQogICAgKGxvb3AKICAgICAgIChsZXQgKChsaW5lIChyZWFkLWxpbmUpKSkKICAgICAgICAod2hlbiAoc3RyaW5nPSBsaW5lICIwIikgIAogICAgICAgICAgOyhmb3JtYXQgdCAifiV+JVNhaWRhOn4lIikKICAgICAgICAgIChtYXBjYXIgIycobGFtYmRhICh4KSAoZm9ybWF0IHQgIn5hOiB+YX4lIiAoY2FyIHgpIChjYWRyIHgpKSkgKHJldmVyc2Uga2FwcmVrYXItdmFsdWVzKSkKICAgICAgICAgIDsoZm9ybWF0IHQgIn4lfiVieWV+JSIpIAogICAgICAgICAgKHJldHVybikpCgoKICAgICAgICAocHVzaCAobGlzdCBsaW5lIChrYXByZWthciAocGFyc2UtaW50ZWdlciBsaW5lKSkpIGthcHJla2FyLXZhbHVlcykKICAgICAgICApCgogICAgKQogICkKKQ==