Problem 36 » 履歴 » バージョン 2
  Noppi, 2024/01/14 12:18 
  
| 1 | 1 | Noppi | [ホーム](https://redmine.noppi.jp) - [[Wiki|Project Euler]] | 
|---|---|---|---|
| 2 | # [[Problem 36]] | ||
| 3 | |||
| 4 | ## Double-base Palindromes | ||
| 5 | The decimal number, $585 = 1001001001_2$ (binary), is palindromic in both bases. | ||
| 6 | |||
| 7 | Find the sum of all numbers, less than one million, which are palindromic in base $10$ and base $2$. | ||
| 8 | |||
| 9 | (Please note that the palindromic number, in either base, may not include leading zeros.) | ||
| 10 | |||
| 11 | ## 二種類の基数による回文数 | ||
| 12 | $585 = 1001001001_2$ (2進) は10進でも2進でも回文数である. | ||
| 13 | |||
| 14 | 100万未満で10進でも2進でも回文数になるような数の総和を求めよ. | ||
| 15 | |||
| 16 | (注: 先頭に0を含めて回文にすることは許されない.) | ||
| 17 | |||
| 18 | ```scheme | ||
| 19 | 2 | Noppi | (import (scheme base) | 
| 20 | (gauche base) | ||
| 21 | (scheme flonum)) | ||
| 22 | |||
| 23 | (define (number-of-digit n base) | ||
| 24 | (assume (exact-integer? n)) | ||
| 25 | (assume (<= 0 n)) | ||
| 26 | (assume (or (= base 2) | ||
| 27 | (= base 10))) | ||
| 28 | (if (zero? n) | ||
| 29 | 1 | ||
| 30 | (+ (floor->exact | ||
| 31 | ((if (= base 2) | ||
| 32 | fllog2 | ||
| 33 | fllog10) | ||
| 34 | n)) | ||
| 35 | 1))) | ||
| 36 | |||
| 37 | (define (palindrome? n base) | ||
| 38 | (assume (exact-integer? n)) | ||
| 39 | (assume (<= 0 n)) | ||
| 40 | (assume (or (= base 2) | ||
| 41 | (= base 10))) | ||
| 42 | (let* ([dn (number-of-digit n base)] | ||
| 43 | [loop-count (div dn 2)]) | ||
| 44 | (let loop ([index 0]) | ||
| 45 | (cond | ||
| 46 | [(<= loop-count index) #t] | ||
| 47 | [(= (div (mod n (expt base (+ 1 index))) | ||
| 48 | (expt base index)) | ||
| 49 | (div (mod n (expt base (- dn index))) | ||
| 50 | (expt base (- dn 1 index)))) | ||
| 51 | (loop (+ index 1))] | ||
| 52 | [else #f])))) | ||
| 53 | |||
| 54 | (define answer-36 | ||
| 55 | (apply + | ||
| 56 | (filter (cut palindrome? <> 2) | ||
| 57 | (filter (cut palindrome? <> 10) | ||
| 58 | (iota 100_0000))))) | ||
| 59 | |||
| 60 | (format #t "36: ~d~%" answer-36) | ||
| 61 | 1 | Noppi | ``` |