haskell: add [p4, p10]
Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
This commit is contained in:
@@ -1,13 +1,19 @@
|
||||
module Lib (fib, primeFactors) where
|
||||
module Lib (fib, primes, primeFactors) where
|
||||
|
||||
fib :: [Integer]
|
||||
fib = 1 : 2 : zipWith (+) fib (tail fib)
|
||||
|
||||
isPrime :: Integer -> Bool
|
||||
isPrime n = n > 1 && null [[] | k <- [2 .. (floor $ sqrt $ fromIntegral n)], mod n k == 0]
|
||||
|
||||
primes :: [Integer]
|
||||
primes = 2 : filter isPrime [3, 4 ..]
|
||||
|
||||
primeFactors :: Integer -> [Integer]
|
||||
primeFactors n = genPrimeFactors n 2
|
||||
where
|
||||
genPrimeFactors :: Integer -> Integer -> [Integer]
|
||||
genPrimeFactors n c
|
||||
| c == n = [n]
|
||||
| c * c > n = [n]
|
||||
| mod n c /= 0 = genPrimeFactors n (c + 1)
|
||||
| otherwise = c : genPrimeFactors (div n c) c
|
||||
|
7
haskell/p10.hs
Normal file
7
haskell/p10.hs
Normal file
@@ -0,0 +1,7 @@
|
||||
import Lib (primes)
|
||||
|
||||
main :: IO ()
|
||||
main = putStr $ show solve
|
||||
|
||||
solve :: Integer
|
||||
solve = sum $ takeWhile (< 2000000) primes
|
5
haskell/p4.hs
Normal file
5
haskell/p4.hs
Normal file
@@ -0,0 +1,5 @@
|
||||
main :: IO ()
|
||||
main = putStr $ show solve
|
||||
|
||||
solve :: Integer
|
||||
solve = maximum [a * b | a <- [100 .. 999], b <- [a .. 999], let s = show $ a * b, s == reverse s]
|
5
haskell/p5.hs
Normal file
5
haskell/p5.hs
Normal file
@@ -0,0 +1,5 @@
|
||||
main :: IO ()
|
||||
main = putStr $ show solve
|
||||
|
||||
solve :: Integer
|
||||
solve = foldl1 lcm [1 .. 20]
|
11
haskell/p6.hs
Normal file
11
haskell/p6.hs
Normal file
@@ -0,0 +1,11 @@
|
||||
main :: IO ()
|
||||
main = putStr $ show $ solve 100
|
||||
|
||||
solve :: Integer -> Integer
|
||||
solve n = squareOfSum n - sumOfSquares n
|
||||
where
|
||||
squareOfSum :: Integer -> Integer
|
||||
squareOfSum n = sum [1 .. n] ^ 2
|
||||
|
||||
sumOfSquares :: Integer -> Integer
|
||||
sumOfSquares n = sum $ map (^ 2) [1 .. n]
|
4
haskell/p7.hs
Normal file
4
haskell/p7.hs
Normal file
@@ -0,0 +1,4 @@
|
||||
import Lib (primes)
|
||||
|
||||
main :: IO ()
|
||||
main = putStr $ show $ primes !! 10001
|
35
haskell/p8.hs
Normal file
35
haskell/p8.hs
Normal file
@@ -0,0 +1,35 @@
|
||||
import Data.Char (digitToInt)
|
||||
|
||||
main :: IO ()
|
||||
main = putStr $ show solve
|
||||
|
||||
solve :: Int
|
||||
solve = maximum $ map (product . map digitToInt) (substrings input 13)
|
||||
where
|
||||
substrings :: String -> Int -> [String]
|
||||
substrings s n
|
||||
| length s < n = []
|
||||
| otherwise = take n s : substrings (tail s) n
|
||||
|
||||
input :: String
|
||||
input =
|
||||
"73167176531330624919225119674426574742355349194934\
|
||||
\96983520312774506326239578318016984801869478851843\
|
||||
\85861560789112949495459501737958331952853208805511\
|
||||
\12540698747158523863050715693290963295227443043557\
|
||||
\66896648950445244523161731856403098711121722383113\
|
||||
\62229893423380308135336276614282806444486645238749\
|
||||
\30358907296290491560440772390713810515859307960866\
|
||||
\70172427121883998797908792274921901699720888093776\
|
||||
\65727333001053367881220235421809751254540594752243\
|
||||
\52584907711670556013604839586446706324415722155397\
|
||||
\53697817977846174064955149290862569321978468622482\
|
||||
\83972241375657056057490261407972968652414535100474\
|
||||
\82166370484403199890008895243450658541227588666881\
|
||||
\16427171479924442928230863465674813919123162824586\
|
||||
\17866458359124566529476545682848912883142607690042\
|
||||
\24219022671055626321111109370544217506941658960408\
|
||||
\07198403850962455444362981230987879927244284909188\
|
||||
\84580156166097919133875499200524063689912560717606\
|
||||
\05886116467109405077541002256983155200055935729725\
|
||||
\71636269561882670428252483600823257530420752963450"
|
6
haskell/p9.hs
Normal file
6
haskell/p9.hs
Normal file
@@ -0,0 +1,6 @@
|
||||
main :: IO ()
|
||||
main = putStr $ show $ solve 1000
|
||||
|
||||
-- Brute search because don't care 🧌
|
||||
solve :: Integer -> Integer
|
||||
solve p = head [a * b * c | a <- [1 .. p], b <- [a + 1 .. p], let c = p - a - b, c > 0 && c ^ 2 == a ^ 2 + b ^ 2]
|
Reference in New Issue
Block a user