Problem 8
うっほ。
以下の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
微妙・・・。キューの使い方を覚えようと思った。