Project Eulerを始めてみた
Project Eulerを始めてみました。
Haskellの練習を兼ねています。
(むしろ、そちらが主目的かも)
とりあえず、Problems ID 1..5をクリア。
どこまでいけるやら。
ID 1
import List uniq (x:[]) = [x] uniq (x:xs) | x == head xs = uniq xs | otherwise = (x:uniq xs) multOf n = map ((*) n) [1..] prog001 = sum $ uniq $ sort $ multOf3 ++ multOf5 where multOf3 = takeWhile ((>) 1000) $ multOf 3 multOf5 = takeWhile ((>) 1000) $ multOf 5 main = putStrLn $ show $ prog001
ID 2
import List fibs n0 n1 = map fib [0..] where fib 0 = n0 fib 1 = n1 fib n = fib (n - 2) + fib (n - 1) prog002 = sum $ takeWhile ((>) 4000000) $ filter even $ fibs 1 2 main = putStrLn $ show $ prog002
ID 3
import List primes = [2] ++ sieve [3,5..] where sieve (p:ns) = [p] ++ (sieve $ filter (\n -> rem n p /= 0) ns) factor 1 _ = [] factor m (n:ns) | rem m n == 0 = (n:factor (quot m n) (n:ns)) | otherwise = factor m ns primeFactors n = factor n primes prog003 = last $ sort $ primeFactors 600851475143 main = putStrLn $ show $ prog003
ID 4
import List isPalindromic n = (show n) == (reverse $ show n) directProducts [] = [[]] directProducts (l:ls) = [(x:xs) | x <- l, xs <- directProducts ls] prog004 = last $ sort $ filter isPalindromic sq3digits where sq3digits = map product $ directProducts [[100..999],[100..999]] main = putStrLn $ show $ prog004
ID 5
import List prog005 = foldr lcm 1 [1..20] main = putStrLn $ show $ prog005