« Project Euler : Problem 34 | トップページ | Project Euler 用関数 (Haskell) »

2010年7月 3日 (土)

Project Euler : Problem 36 ~ 十進法と二進法

 問題はこちらをご覧ください。

 

 まずは愚直に……偶数は二進法にしたときに一の位が必ず「0」になるので、最初から除外してあります。

-- 回文リストか? isPalindromicList :: Eq a => [a] -> Bool isPalindromicList ns = ns == reverse ns -- 整数をリストに変換 -- ex : integralToList 10 123 => [1,2,3] -- ex : integralToList 2 123 => [1,1,1,1,0,1,1] integralToList :: Integral a => a -> a -> [a] integralToList radix n = iter n [] where iter n prd | n < radix = n : prd | otherwise = iter (div n radix) (rem n radix : prd) problem036 :: Int problem036 = sum $ filter (\x -> check 10 x && check 2 x) [1, 3 .. 1000000] where check m n = isPalindromicList $ integralToList m n main :: IO () main = print problem036

 次に、十進法の回文数を作って、それが二進法の回文数になるかを調べる方法。

-- 奇数桁の回文数を作る oddPalNum :: Integral a => a -> a oddPalNum n = fromIntegral $ read $ ns ++ tail (reverse ns) where ns = show n -- 偶数桁の回文数を作る evenPalNum :: Integral a => a -> a evenPalNum n = fromIntegral $ read $ ns ++ reverse ns where ns = show n -- 回文リストか? isPalindromicList :: Eq a => [a] -> Bool isPalindromicList ns = ns == reverse ns -- 整数をリストに変換 -- ex : integralToList 10 123 => [1,2,3] -- ex : integralToList 2 123 => [1,1,1,1,0,1,1] integralToList :: Integral a => a -> a -> [a] integralToList radix n = iter n [] where iter n prd | n < radix = n : prd | otherwise = iter (div n radix) (rem n radix : prd) palNums :: [Int] palNums = filter odd $ map oddPalNum ns ++ map evenPalNum ns where ns = [1 .. 999] problem036 :: Int problem036 = sum $ filter check palNums where check n = isPalindromicList $ integralToList 2 n main :: IO () main = print problem036

« Project Euler : Problem 34 | トップページ | Project Euler 用関数 (Haskell) »

Haskell」カテゴリの記事

Project Euler」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/48786257

この記事へのトラックバック一覧です: Project Euler : Problem 36 ~ 十進法と二進法:

« Project Euler : Problem 34 | トップページ | Project Euler 用関数 (Haskell) »

2016年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

最近のトラックバック

無料ブログはココログ