Last active
December 20, 2015 22:19
-
-
Save zaneli/6204677 to your computer and use it in GitHub Desktop.
「HaskellでProject Euler(Problem 7~9)」ブログ用
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
main = print $ prime 10001 | |
prime :: Integral a => Int -> a | |
prime 1 = 2 | |
prime n = head $ prime' 3 [] | |
where | |
prime' m list | length list >= (n-1) = list | |
| isPrime list = prime' (m + 2) (m:list) | |
| otherwise = prime' (m + 2) list | |
where isPrime = all (\x -> m `mod` x /= 0) . dropWhile (\x -> x ^ 2 > m) |
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
main = print $ prime 10001 | |
prime :: Integral a => Int -> a | |
prime n = head $ prime' 3 [2] [] | |
where | |
prime' m list list' | length list >= n = list | |
| isPrime list' = prime' (m + 2) (m:list) (list'++[m]) | |
| otherwise = prime' (m + 2) list list' | |
where isPrime = all (\x -> m `mod` x /= 0) . takeWhile (\x -> x ^ 2 <= m) |
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
main = print $ prime 10001 | |
prime :: Integral a => Int -> a | |
prime 1 = 2 | |
prime n = prime' 3 [] (n - 1) -- (n - 1) から 0 までデクリメントするカウンタ。最初に -1 しているのは、2番目の素数である3からはじめるため。 | |
where | |
prime' m list cnt | cnt' <= 0 = m | |
| otherwise = prime' (m + 2) list' cnt' | |
where | |
(cnt', list') | isPrime list = (cnt - 1, list ++ [m]) | |
| otherwise = (cnt, list) | |
isPrime = all (\x -> m `mod` x /= 0) . takeWhile (\x -> x ^ 2 <= m) |
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
main = print $ maxProduct number 5 | |
maxProduct :: (Show a, Num b, Ord b, Read b) => a -> Int -> b | |
maxProduct n digit = maxProduct' (show n) 0 | |
where | |
maxProduct' numStr@(_:rest) maxNum | |
| (length numStr) < digit = maxNum | |
| any (== '0') num = maxProduct' rest maxNum | |
| otherwise = maxProduct' rest $ max currentNum maxNum | |
where | |
currentNum = product $ map (\x -> (read [x])) num | |
num = take digit numStr | |
number = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450 |
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
main = print $ pythagorean 1000 | |
pythagorean :: (Enum a, Eq a, Num a) => a -> a | |
pythagorean n = pythagorean' $ [(a, b, 1000 - a - b) | a <- [1..(n-3)], b <- [2..(n-2)]] | |
where | |
pythagorean' [] = 0 | |
pythagorean' ((a, b, c):xs) | |
| (a^2) + (b^2) == c^2 = a * b * c | |
| otherwise = pythagorean' xs |
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
main = print $ pythagorean 1000 | |
pythagorean :: (Enum a, Eq a, Num a) => a -> a | |
pythagorean n = | |
let (a, b, c) = head $ [(a, b, c) | a <- [1..(n-3)], b <- [2..(n-2)], c <- [1000 - a - b], a^2 + b^2 == c^2] | |
in a * b * c |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment