Haskell

Problem 25

http://projecteuler.net/index.php?section=problems&id=25 -- Haskell, 090104 import List (findIndex) import Maybe (fromJust) import Sequence (fibonacci) main = print $ (+) 1 $ fromJust $ findIndex ((<=) 1000 . length . show) fibonacci 数列…

素数モジュール

-- Haskell, 090105 module Prime (prime, isprime) where -- 素数 prime :: Integral a => [a] prime = 2 : filter (\n -> (all (\x -> n`mod`x/=0) . takeWhile (\x -> x*x<=n)) prime) [3..] -- 素数判定 isprime :: Integral a => a -> Bool isprime n =…

数列モジュール

-- Haskell, 090104 module Sequence (prime, fibonacci, factorial, trianglar) where import qualified Prime (prime) -- 素数 prime = Prime.prime -- フィボナッチ数 fibonacci :: Integral a => [a] fibonacci = 1 : 1 : zipWith (+) fibonacci (tail f…

Problem 26

http://projecteuler.net/index.php?section=problems&id=26 --Haskell (needs -package containers), 20090102 import List (elemIndex) import Maybe (fromJust) import Data.Map (findMax, fromList) search :: Int -> (Int, Int) search n = (fromJust $…

Problem 18

http://projecteuler.net/index.php?section=problems&id=18 --Haskell (Input data from STDIN), 20090101 process :: [Int] -> [Int] -> [Int] process f t = zipWith max (zipWith (+) f (init t) ++ [last t]) (head t : zipWith (+) f (tail t)) main =…

Problem 19

http://projecteuler.net/index.php?section=problems&id=19 --Haskell, 20090101 zeller :: Int -> Int -> Int zeller y m = if (y + y`div`4 - y`div`100 + y`div`400 + (13*m+8)`div`5 + 1) `mod` 7 == 0 then 1 else 0 main = print $ sum $ map (sum . …

Problem 20

http://projecteuler.net/index.php?section=problems&id=20 --Haskell, 20090104 import Char (digitToInt) import Sequence (factorial) main = print $ sum $ map digitToInt $ show $ factorial!!99 数列モジュールを使用.

Problem 21

http://projecteuler.net/index.php?section=problems&id=21 --Haskell, 20090101 import List (nub) divisors :: Int -> Int divisors n = sum $ 1 : concat [nub [x, n`div`x] | x<-takeWhile ((<=n).(^2)) [2..], n`mod`x==0] main = print $ sum [x | x<…

Problem 22

http://projecteuler.net/index.php?section=problems&id=22 --Haskell (Input data from STDIN), 20090101 import Char (ord, isAlpha) import List (sort) split :: String -> [String] split ['"'] = [] split xs = let (f, t) = span isAlpha $ dropWhil…

Problem 15

http://projecteuler.net/index.php?section=problems&id=15 --Haskell, 20090104 import Sequence (factorial) main = print $ factorial!!39`div`(factorial!!19)^2 数列モジュールを使用.

Problem 16

http://projecteuler.net/index.php?section=problems&id=16 --Haskell, 20090101 import Char (digitToInt) main = print $ sum $ map digitToInt $ show (2^1000)

FizzBuzz

見かけたコードがおもしろかったので貼っておく. http://d.hatena.ne.jp/takatoh/20070509/fizzbuzz

Problem 12

http://projecteuler.net/index.php?section=problems&id=12 --Haskell, 20090104 import Sequence (trianglar) enprimes :: Int -> Int -> [Int] enprimes 1 _ = [] enprimes s n = let t = takeWhile ((==0).(s`mod`)) (iterate (*n) 1) in length t - 1 :…

Problem 13

http://projecteuler.net/index.php?section=problems&id=13 --Haskell (Input data from STDIN), 20090101 main = getContents >>= print . take 10 . show . sum . map read . lines

Problem 14

http://projecteuler.net/index.php?section=problems&id=14 --Haskell (needs -fbang-patterns -package containers), 20090101 import Data.Map (findMax, fromList) collatz :: Integer -> Integer collatz !n | n==1 = 1 | even n = 1 + collatz (n`div`…

Problem 11

http://projecteuler.net/index.php?section=problems&id=11 traih.log様のSmartなコードを参考に. --Haskell (Input data from STDIN), 20090101 import List (tails, transpose) horizon, diagonal :: [[Int]] -> Int horizon = maximum . map (maximum .…

Problem 1

http://projecteuler.net/index.php?section=problems&id=1 --Haskell, 20090101 main = print $ sum $ [x | x<-[1..999], x`mod`3==0||x`mod`5==0]

Problem 2

http://projecteuler.net/index.php?section=problems&id=2 --Haskell, 20090104 import Sequence (fibonacci) main = print $ sum [x | x<-takeWhile (<=4000000) fibonacci, even x] 数列モジュールを使用.

Problem 3

http://projecteuler.net/index.php?section=problems&id=3 --Haskell, 20090101 divide :: Integer -> Integer -> Integer divide 1 n = n divide t n = if t`mod`n==0 then divide (t`div`n) n else divide t (n+1) main = print $ divide 600851475143 2

Problem 4

http://projecteuler.net/index.php?section=problems&id=4 --Haskell, 20090101 main = print $ maximum [x*y | x<-[100..999], y<-[100..999], x>=y, show (x*y)==(reverse.show) (x*y)]

Problem 5

http://projecteuler.net/index.php?section=problems&id=5 --Haskell, 20090101 main = print $ foldl1 lcm [1..20]

Problem 6

http://projecteuler.net/index.php?section=problems&id=6 --Haskell, 20090101 main = print $ (sum [1..100])^2 - sum [x^2 | x<-[1..100]]

Problem 7

http://projecteuler.net/index.php?section=problems&id=7 --Haskell, 20090104 import Prime (prime) main = print $ prime!!10000 素数モジュールを使用.

Problem 8

http://projecteuler.net/index.php?section=problems&id=8 --Haskell (Input data from STDIN), 20090101 import List (tails) import Char (digitToInt) main = getLine >>= print . maximum . map (product . map digitToInt . take 5) . tails

Problem 9

http://projecteuler.net/index.php?section=problems&id=9 --Haskell, 20090101 main = print $ head [x*y*(1000-x-y) | x<-[1..998], y<-[1..998], x

Problem 10

http://projecteuler.net/index.php?section=problems&id=10 --Haskell, 20090104 import Prime (prime) main = print $ foldl (\x y->x+toInteger y) 0 $ takeWhile (<=2000000) prime 素数モジュールを使用.