problem 4

1 から 999*999 までの整数のなかで 121 のように桁を反転させても同じ数になる数の最大のものを求める問題です。

(use srfi-13)

(define (is-palindomic n)
  (let1 strn (number->string n)
        (string=? strn (string-reverse strn))))

(define (p4)
  (define (p4-iter i j m)
    (if (= i 1000) m
      (let1 ij (* i j)
            (p4-iter (if (= j 999) (+ i 1) i)
                     (if (= j 999) 1 (+ j 1))
                     (if (and (is-palindomic ij) (> ij m)) ij m)))))
  (p4-iter 1 1 0))

(print (p4))

わかったこと

  • 文字列のいろんなライブラリは srfi-13 というモジュールにある。
  • 束縛変数がひとつのときは let1 を使うとすっきりしていい。

これが超便利!

problem 3 をさらっと飛ばしていますが、簡単なのからやっていこうと思います。