Problem 4
今日もやろう。
左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。
では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。
n桁 * n桁のリストを全部出してからフィルタリングしてみた。
;; for MzScheme (require (lib "1.ss" "srfi")) (require (lib "13.ss" "srfi")) (define (problem4 n) (let* ((start (expt 10 (- n 1))) (seed (iota (* start 9) start)) (all (fold-right (lambda (x acc) (append (map (lambda (y) (* x y)) seed) acc)) '() seed)) (palindromic? (lambda (n) (let ((s (number->string n))) (equal? s (string-reverse s)))))) (filter palindromic? all))) (apply max (problem4 2)) ; 9009 (apply max (problem4 3)) ; 906609
もうちょっとうまいやり方がありそうな気がする。