fork download
  1. (defun calculate-kaprekar (index expt-number)
  2. (cond
  3. ((= (length (prin1-to-string expt-number)) index) 0)
  4. ((= (parse-integer (subseq (prin1-to-string expt-number) index)) 0 ) 0)
  5.  
  6. (t (+ (parse-integer (subseq (prin1-to-string expt-number) 0 index))
  7. (parse-integer (subseq (prin1-to-string expt-number) index)))
  8. ))
  9.  
  10. )
  11.  
  12. ;Calculate if the input is a kaprekar number
  13. (defun kaprekar (num &optional index expt-number)
  14. (cond ( (and (numberp expt-number) (numberp index))
  15. (let ((sum (calculate-kaprekar index expt-number)))
  16. (cond
  17. ((= num 1) "S")
  18. ((= num sum) "S")
  19. ((zerop sum) "N")
  20. (t (kaprekar num (+ 1 index) expt-number))
  21.  
  22. )
  23.  
  24.  
  25. )
  26. )
  27.  
  28.  
  29. (t
  30. (let ((x (expt num 2)))
  31. (kaprekar num 1 x)
  32. )
  33.  
  34. )
  35.  
  36.  
  37. )
  38.  
  39. )
  40.  
  41. (defun main ()
  42. (let ((kaprekar-values '()))
  43. (loop
  44. (let ((line (read-line)))
  45. (when (string= line "0")
  46. ;(format t "~%~%Saida:~%")
  47. (mapcar #'(lambda (x) (format t "~a: ~a~%" (car x) (cadr x))) (reverse kaprekar-values))
  48. ;(format t "~%~%bye~%")
  49. (return))
  50.  
  51.  
  52. (push (list line (kaprekar (parse-integer line))) kaprekar-values)
  53. )
  54.  
  55. )
  56. )
  57. )
Success #stdin #stdout 0.02s 10592KB
stdin
Standard input is empty
stdout
Standard output is empty