Меморизация Паскаль треугольник
Меня не интересует реальное решение или другие методы решения проблемы, это памятка, с которой мне нужна помощь :)
Мне нужна помощь в решении проблемы треугольника Паскаля с запоминанием. Я хочу получить среднее число в основании треугольника. (Проект Эйлера 15)
Первый пример не запомнился (хотя название подсказывает так) «20 20» не решаемо
Вторая попытка - попытка сделать что-то похожее на:http://www.haskell.org/haskellwiki/Memoization
В-третьих, это подсказка для подсказок №2, если она более читабельна для кого-то.
Я получаю эту ошибку, но я не уверен, что это правильно, даже если она будет скомпилирована ... (запустить из ghci с 2 2 в качестве параметров
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)