Created
September 14, 2009 04:58
-
-
Save cloudhead/186510 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Project Euler in Haskell -- | |
-- by cloudhead -- | |
-- "there's some real nasty code in here" | |
import Char | |
-- Some useful functions | |
-- | |
prime :: Integer -> Bool | |
prime n = if null [ x | x <- [2..(ceiling $ sqrt (fromInteger n))], n `mod` x == 0 ] | |
then True | |
else False | |
factorial :: (Integral a) => a -> a | |
factorial 0 = 1 | |
factorial n = n * factorial (n - 1) | |
-- | |
euler1 :: Int | |
euler1 = sum [ x | x <- [0 .. 999], mod x 3 == 0 || mod x 5 == 0 ] | |
euler2 :: Int | |
euler2 = sum [ x | x <- (take 40 fib), (mod x 2) == 0, x < 4000000 ] | |
where fib = 0 : 1 : zipWith (+) fib (tail fib) | |
euler3 :: Integer -> Integer | |
euler3 x = head [ y | y <- [r, r - 1 .. 2], x `mod` y == 0, prime y ] | |
where r = ceiling $ sqrt (fromInteger x) | |
euler4 :: Integer | |
euler4 = maximum [ x * y | |
| x <- [1..999] | |
, y <- [x..999] | |
, palindromic (x * y) | |
] where | |
palindromic x = (show x) == reverse (show x) | |
euler5 :: Integer | |
euler5 = f 1 | |
where f 20 = 20 | |
f x = lcm x (f (x + 1)) | |
euler6 :: Integer | |
euler6 = sum [ x | x <- [1..100] ] ^ 2 - sum [ x ^ 2 | x <- [1..100] ] | |
euler7 :: Integer | |
euler7 = last $ take 10001 [ x | x <- [1..], prime x ] | |
euler8 :: Integer | |
euler8 = maximum [ product (digitize xs) | xs <- take5 number ] | |
where take5 :: String -> [String] | |
take5 xs | |
| length xs <= 5 = [xs] | |
| otherwise = take 5 xs : take5 (tail xs) | |
digitize :: String -> [Integer] | |
digitize xs = [ toInteger (digitToInt x) | x <- xs ] | |
number = "7316717653133062" -- actual number is *way* longer | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment