; sum square digits sequence
(define (square x) (* x x))
(define (digits n . args)
(let ((b (if (null? args) 10 (car args))))
(let loop ((n n) (d '()))
(if (zero? n) d
(loop (quotient n b)
(cons (modulo n b) d))))))
(define (sum xs) (apply + xs))
(define (ssds n) ; sum square digits sequence
(let loop ((n n) (ns (list)))
(if (or (= n 1) (member n '(4 16 37 58 89 145 42 20)))
(reverse (cons n ns))
(let ((x (sum (map square (digits n)))))
(loop x (cons n ns))))))
(display (ssds 19)) (newline)
(display (ssds 18)) (newline)
OyBzdW0gc3F1YXJlIGRpZ2l0cyBzZXF1ZW5jZQoKKGRlZmluZSAoc3F1YXJlIHgpICgqIHggeCkpCgooZGVmaW5lIChkaWdpdHMgbiAuIGFyZ3MpCiAgKGxldCAoKGIgKGlmIChudWxsPyBhcmdzKSAxMCAoY2FyIGFyZ3MpKSkpCiAgICAobGV0IGxvb3AgKChuIG4pIChkICcoKSkpCiAgICAgIChpZiAoemVybz8gbikgZAogICAgICAgICAgKGxvb3AgKHF1b3RpZW50IG4gYikKICAgICAgICAgICAgICAgIChjb25zIChtb2R1bG8gbiBiKSBkKSkpKSkpCgooZGVmaW5lIChzdW0geHMpIChhcHBseSArIHhzKSkKCihkZWZpbmUgKHNzZHMgbikgOyBzdW0gc3F1YXJlIGRpZ2l0cyBzZXF1ZW5jZQogIChsZXQgbG9vcCAoKG4gbikgKG5zIChsaXN0KSkpCiAgICAoaWYgKG9yICg9IG4gMSkgKG1lbWJlciBuICcoNCAxNiAzNyA1OCA4OSAxNDUgNDIgMjApKSkKICAgICAgICAocmV2ZXJzZSAoY29ucyBuIG5zKSkKICAgICAgICAobGV0ICgoeCAoc3VtIChtYXAgc3F1YXJlIChkaWdpdHMgbikpKSkpCiAgICAgICAgICAobG9vcCB4IChjb25zIG4gbnMpKSkpKSkKCihkaXNwbGF5IChzc2RzIDE5KSkgKG5ld2xpbmUpCihkaXNwbGF5IChzc2RzIDE4KSkgKG5ld2xpbmUp