Memoization Pascals Dreieck
Ich interessiere mich nicht für die eigentliche Lösung oder andere Methoden, um das Problem zu lösen, es ist die Notiz, bei der ich Hilfe brauche :)
Ich brauche Hilfe bei einem Pascal-Dreieck-Problem mit dem Auswendiglernen. Ich möchte die mittlere Zahl in die Basis des Dreiecks bekommen. (Projekt Euler 15)
Das erste Beispiel ist nicht eingeprägt (obwohl der Name dies nahelegt). "20 20" ist nicht lösbar
Der zweite Versuch ist ein Versuch, etwas Ähnliches zu tun wie:http://www.haskell.org/haskellwiki/Memoization
Der dritte ist der Vorschlag auf Nr. 2, ob dies für jemanden besser lesbar ist.
Ich bekomme diese Fehlermeldung, aber ich bin mir nicht sicher, ob es richtig ist, auch wenn es kompilieren würde ... (laufen von ghci mit 2 2 als Parameter
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)