1
0
Fork 0

Compare commits

..

2 Commits

Author SHA1 Message Date
Bill Ewanick 03276cd8c5 Question 18 2023-10-20 12:30:57 -04:00
Bill Ewanick 224c8cf70c pedantic 2023-10-20 12:30:14 -04:00
2 changed files with 52 additions and 2 deletions

View File

@ -0,0 +1,50 @@
import Debug.Trace (trace)
small :: [[Integer]]
small = [
[3],
[7,4],
[2,4,6],
[1000,5,9,3]
]
triangle :: [[Integer]]
triangle = [
[75],
[95,64],
[17,47,82],
[18,35,87,10],
[20,04,82,47,65],
[19,01,23,75,03,34],
[88,02,77,73,07,63,67],
[99,65,04,28,06,16,70,92],
[41,41,26,56,83,40,80,70,33],
[41,48,72,33,47,32,37,16,94,29],
[53,71,44,65,25,43,91,52,97,51,14],
[70,11,33,28,77,73,17,78,39,68,17,57],
[91,71,52,38,17,14,91,43,58,50,27,29,48],
[63,66,04,68,89,53,67,30,73,16,69,87,40,31],
[04,62,98,27,23,09,70,98,73,93,38,53,60,04,23]
]
maxPath t i j = (t !! i !! j) +
(if i + 1 < length t
then max (maxPath t (i + 1) j) (maxPath t (i + 1) (j + 1))
else 0)
-- This max path doesn't consider the entire path,
-- it only considers the two numbers directly below the index
newMaxPath t i j = (t !! i !! j) +
(if i + 1 < length t
then newMaxPath t i' j'
else 0)
where
a = t !! i' !! j
b = t !! i' !! (j+1)
i' = i+1
j' = trace (show a) $ if a > b then j else j+1
main :: IO ()
main = print ans
ans :: Integer
ans = maxPath small 0 0

View File

@ -17,9 +17,9 @@ threeDigitProducts = [ n*m | n <- [100..999], m <- [n..999] ]
isPalindrome :: Integer -> Bool isPalindrome :: Integer -> Bool
isPalindrome n = all (== True) $ zipWith (==) half half' isPalindrome n = all (== True) $ zipWith (==) half half'
where where
(half, half'') = splitAt h n' (half, half'') = splitAt l n'
half' = reverse half'' half' = reverse half''
h = length n' `div` 2 l = length n' `div` 2
n' = show n n' = show n
-- n' = trace (show n) $ show n -- n' = trace (show n) $ show n