Triplo de pascal de memorização
Eu não estou interessado na solução real ou outros métodos para resolver o problema, é a memoização eu preciso de ajuda com :)
Preciso de ajuda para fazer um problema no triângulo pascal com memoização. Eu quero pegar o número do meio na base do triângulo. (Projeto Euler 15)
O primeiro exemplo não é memoizado (embora o nome sugere isso) "20 20" não solucionável
A segunda tentativa é uma tentativa de fazer algo semelhante a:http://www.haskell.org/haskellwiki/Memoization
A terceira é a sugestão de sugestões no no2, se isso for mais legível para alguém.
Eu recebo este erro, mas eu não tenho certeza do seu direito, mesmo se ele compilar ... (correr de ghci com 2 2 como 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)