problem 99
1000 個ある 基数とべき数のペア(ファイルの各行にコンマ区切りで列挙されている)からべき乗数のうち、最大になるものは何番目かという問題です。
基数、べき数ともに大きな数なので、べき乗数で比較せずに対数で比較します。比較に使うだけなので対数の底は dont' care です。
(define (p99) (call-with-input-file "p99_data.txt" (lambda (p) (let loop ((tmp '(0 0)) (i 1)) (let1 line (read-line p) (if (eof-object? line) (cadr tmp) (let1 value (apply (lambda (b e) (* e (log b))) (map string->number (string-split line #\,))) (loop (if (> (car tmp) value) tmp (list value i)) (+ i 1))))))))) (print (p99))
問題 99 にしては簡単な問題でした。