Commit 5564942 1 parent fdb2b53 commit 5564942 Copy full SHA for 5564942
File tree 6 files changed +31
-20
lines changed
6 files changed +31
-20
lines changed Original file line number Diff line number Diff line change
1
+ {-
2
+ - Shared code for solutions to Project Euler problems
3
+ - Copyright (c) Project Nayuki. All rights reserved.
4
+ -
5
+ - https://www.nayuki.io/page/project-euler-solutions
6
+ - https://github.com/nayuki/Project-Euler-solutions
7
+ -}
8
+
9
+ module EulerLib
10
+ (digitSum )
11
+ where
12
+
13
+
14
+ digitSum :: Integral a => a -> a
15
+ digitSum 0 = 0
16
+ digitSum n = (mod n 10 ) + (digitSum (div n 10 ))
Original file line number Diff line number Diff line change 6
6
- https://github.com/nayuki/Project-Euler-solutions
7
7
-}
8
8
9
+ import EulerLib
10
+
9
11
10
12
-- We implement this solution in a straightforward way thanks to Haskell's built-in arbitrary precision Integer type.
11
13
main = putStrLn (show ans)
12
- ans = digitSum (2 ^ 1000 :: Integer )
13
-
14
- digitSum 0 = 0
15
- digitSum n = (mod n 10 ) + (digitSum (div n 10 ))
14
+ ans = EulerLib. digitSum (2 ^ 1000 :: Integer )
Original file line number Diff line number Diff line change 6
6
- https://github.com/nayuki/Project-Euler-solutions
7
7
-}
8
8
9
+ import EulerLib
10
+
9
11
10
12
{-
11
13
- We do a straightforward product thanks to Haskell's built-in arbitrary precision Integer type.
12
14
-}
13
15
14
16
main = putStrLn (show ans)
15
- ans = digitSum (factorial 100 :: Integer )
16
-
17
- digitSum 0 = 0
18
- digitSum n = (mod n 10 ) + (digitSum (div n 10 ))
17
+ ans = EulerLib. digitSum (factorial 100 :: Integer )
19
18
20
19
factorial n = product [1 .. n]
Original file line number Diff line number Diff line change 6
6
- https://github.com/nayuki/Project-Euler-solutions
7
7
-}
8
8
9
+ import EulerLib
9
10
10
- main = putStrLn (show ans)
11
- ans = foldl1 max [digitsum (a^ b) | a <- [0 .. 99 ], b <- [0 .. 99 ]]
12
11
13
- digitsum 0 = 0
14
- digitsum n = ( mod n 10 ) + (digitsum ( div n 10 ))
12
+ main = putStrLn ( show ans)
13
+ ans = foldl1 max [ EulerLib. digitSum (a ^ b) | a <- [ 0 .. 99 ], b <- [ 0 .. 99 ]]
Original file line number Diff line number Diff line change 6
6
- https://github.com/nayuki/Project-Euler-solutions
7
7
-}
8
8
9
+ import EulerLib
10
+
9
11
10
12
limit = 100
11
13
main = putStrLn (show ans)
@@ -15,12 +17,9 @@ ans = let
15
17
| otherwise = let (n, d) = func (i+ 1 ) end
16
18
in ((eContFracTerm i) * n + d, n)
17
19
(numer, _) = func 0 limit
18
- in digitSum numer
20
+ in EulerLib. digitSum numer
19
21
20
22
eContFracTerm 0 = 2
21
23
eContFracTerm i
22
24
| mod i 3 == 2 = (div i 3 ) * 2 + 2
23
25
| otherwise = 1
24
-
25
- digitSum 0 = 0
26
- digitSum n = (mod n 10 ) + (digitSum (div n 10 ))
Original file line number Diff line number Diff line change 6
6
- https://github.com/nayuki/Project-Euler-solutions
7
7
-}
8
8
9
+ import EulerLib
10
+
9
11
10
12
base = 10
11
13
digits = 20
@@ -41,9 +43,6 @@ ans = (ways (digits + consecutive) 0) - (ways (digits + consecutive - 1) 0)
41
43
ways :: Int -> Int -> Integer
42
44
ways 0 0 = 1
43
45
ways 0 _ = 0
44
- ways d p = if (digitSum p) > maxSum then 0
46
+ ways d p = if (EulerLib. digitSum p) > maxSum then 0
45
47
else sum [waysMemo !! (d - 1 ) !! ((mod p (base^ (consecutive - 1 ))) * base + i) | i <- [0 .. 9 ]]
46
48
waysMemo = [[ways d p | p <- [0 .. ]] | d <- [0 .. ]]
47
-
48
- digitSum 0 = 0
49
- digitSum n = (mod n 10 ) + (digitSum (div n 10 ))
You can’t perform that action at this time.
0 commit comments