Problem 55 - Lychrel数

回文数絡み。


Problem 55 - PukiWiki


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回目は判断しないことにしてみた。