Problem 55 - Lychrel数
回文数絡み。
349を反転させて足していくと
349 + 943 = 1292,1292 + 2921 = 4213,4213 + 3124 = 7337
回文数になるらしい。不思議だ。
回文数にならないものをLychrel数と言うらしい。50回回しても回文数が見つからなければ、Lychrel数と判断する。
ちとハマりポイントは、回文数も対象に加える。というところ。
たまにはSRFI使いまくりで。
(require (lib "1.ss" "srfi")) (require (lib "13.ss" "srfi")) (require (lib "26.ss" "srfi")) (define (problem55 n) (letrec ((lychre? (lambda (n try) (or (>= try 50) (let ((mirrer (string->number (string-reverse (number->string n))))) (if (and (not (zero? try)) (= n mirrer)) #f (lychre? (+ n mirrer) (+ try 1)))))))) (length (filter (cut lychre? <> 0) (iota n))))) (problem55 10000) ; 249
2回回すのがどうも面倒なので、1回目は判断しないことにしてみた。