Problem 8

うっほ。

Problem 8 - PukiWiki

以下の1000桁の数字から5つの連続する数字を取り出してその積を計算する。そのような積の中で最大のものの値はいくらか

73167176531330624919225119674426574742355349194934
...

ちと面倒そうな問題。


文字列を数値のリストに直して、5個のキューを維持しながらリストを走査すると。

(require (lib "1.ss" "srfi"))
(require (lib "8.ss" "srfi"))

(define (problem8 s)
  (define (digit->integer c) (if (char-numeric? c)
                                 (- (char->integer c) (char->integer #\0))
                                 #f))
  (define (iter acc seq l)
    (if (null? l)
        acc
        (iter (cons (apply * seq) acc)
              (append (cdr seq) (list (car l)))
              (cdr l))))
  (receive (a b)
           (split-at (map digit->integer (string->list s)) 5)
           (apply max (iter '() a b))))

(problem8 "73167176531330624919225119674426574742355349194934...") ; 40824

微妙・・・。キューの使い方を覚えようと思った。