Trójkąt memoization pascals
Nie jestem zainteresowany rzeczywistym rozwiązaniem lub innymi metodami rozwiązującymi problem, to pamięć, której potrzebuję pomocy :)
Potrzebuję pomocy w zrobieniu problemu z trójkątem pascals z zapamiętywaniem. Chcę uzyskać środkowy numer u podstawy trójkąta. (Project Euler 15)
Pierwszy przykład nie jest zapamiętywany (chociaż sugeruje to nazwa) „20 20” nie da się rozwiązać
Druga próba to próba zrobienia czegoś podobnego do:http://www.haskell.org/haskellwiki/Memoization
Trzecia jest sugestia hlints na nr 2, jeśli jest to bardziej czytelne dla kogoś.
Dostaję ten błąd, ale nie jestem pewien, czy ma rację, nawet jeśli się skompiluje ... (uruchom z ghci z 2 2 jako params
no instance for (Num [a0])
arising from a use of `zmemopascals'
Possible fix: add an instance declaration for (Num [a0])
In the expression: zmemopascals 2 2
In an equation for `it': it = zmemopascals 2 2
.
Code:
--1
memopascals r c = [[pascals a b | b<-[1..c]] | a<-[1..r]] !! (r-1) !! (c-1)
where pascals 1 _ = 1
pascals _ 1 = 1
pascals x y = memopascals (x-1) y + memopascals x (y-1)
--2
--xmemopascals :: Int -> Int -> Int
xmemopascals r c = map (uncurry pascals) (zip [1..] [1..]) !! (r-1) !! (c-1)
where pascals 1 _ = 1
pascals _ 1 = 1
pascals x y = memopascals (x-1) y + memopascals x (y-1)
--3
zmemopascals r c = zipWith pascals [1 ..] [1 ..] !! (r-1) !! (c-1)
where pascals 1 _ = 1
pascals _ 1 = 1
pascals x y = memopascals (x-1) y + memopascals x (y-1)