Problem36
30分プログラム、その309。Problem36 - Project Euler。
585 = 10010010012 (2進) は10進でも2進でも回文数である.
100万未満で10進でも2進でも回文数になるような数の総和を求めよ.
(注: 先頭に0を含めて回文にすることは許されない.)
0が条件を満すかどうか、しばらくの間悩んでた。でも総和だから、含めても含めなくても答えは同じなんだよね。恥かしい・・・。
あと、Haskellは強すぎるだろ。
使い方
*Main> main 872187
ソースコード
import Numeric import Control.Monad.List kaibunDigit :: Int -> [Int] kaibunDigit 1 = [1..9] kaibunDigit 2 = [11*n | n <- [1..9]] kaibunDigit n = do x <- 0:kaibunDigit (n-2) y <- [1..9] return (base*y+x*10+y) where base = 10^(n-1) binary :: Int -> String binary x = showIntAtBase 2 (\x -> if x == 0 then '0' else '1') x "" isKaibunBin :: Int -> Bool isKaibunBin x = bin == reverse bin where bin = binary x main = print $ sum $ do n <- [1..6] x <- kaibunDigit n guard $ isKaibunBin x return x