; lychrel numbers
(define (r n)
(let loop ((n n) (z 0))
(if (zero? n) z
(loop (quotient n 10)
(+ (* z 10) (modulo n 10))))))
(define (s n) (+ n (r n)))
(define (p? n) (= n (r n)))
(define (lychrel n . b)
(let ((b (if (null? b) 100 (car b))))
(let loop ((b b) (z n) (xs (list n)))
(if (zero? b) (list n #f)
(let ((x (s z)))
(if (p? x) (reverse (cons x xs))
(loop (- b 1) x (cons x xs))))))))
(display (lychrel 281)) (newline)
(display (lychrel 196)) (newline)
(do ((n 1 (+ n 1))) ((< 1000 n))
(when (not (cadr (lychrel n)))
(display n) (newline)))
OyBseWNocmVsIG51bWJlcnMKCihkZWZpbmUgKHIgbikKICAobGV0IGxvb3AgKChuIG4pICh6IDApKQogICAgKGlmICh6ZXJvPyBuKSB6CiAgICAgIChsb29wIChxdW90aWVudCBuIDEwKQogICAgICAgICAgICAoKyAoKiB6IDEwKSAobW9kdWxvIG4gMTApKSkpKSkKCihkZWZpbmUgKHMgbikgKCsgbiAociBuKSkpCgooZGVmaW5lIChwPyBuKSAoPSBuIChyIG4pKSkKCihkZWZpbmUgKGx5Y2hyZWwgbiAuIGIpCiAgKGxldCAoKGIgKGlmIChudWxsPyBiKSAxMDAgKGNhciBiKSkpKQogICAgKGxldCBsb29wICgoYiBiKSAoeiBuKSAoeHMgKGxpc3QgbikpKQogICAgICAoaWYgKHplcm8/IGIpIChsaXN0IG4gI2YpCiAgICAgICAgKGxldCAoKHggKHMgeikpKQogICAgICAgICAgKGlmIChwPyB4KSAocmV2ZXJzZSAoY29ucyB4IHhzKSkKICAgICAgICAgICAgKGxvb3AgKC0gYiAxKSB4IChjb25zIHggeHMpKSkpKSkpKQoKKGRpc3BsYXkgKGx5Y2hyZWwgMjgxKSkgKG5ld2xpbmUpCihkaXNwbGF5IChseWNocmVsIDE5NikpIChuZXdsaW5lKQoKKGRvICgobiAxICgrIG4gMSkpKSAoKDwgMTAwMCBuKSkKICAod2hlbiAobm90IChjYWRyIChseWNocmVsIG4pKSkKICAgIChkaXNwbGF5IG4pIChuZXdsaW5lKSkp