Declaratieve Talen/oplossingWinkelen
--Data type voor Section data Section = Section Int Int Int deriving (Show) --Je zou ook een type declaratie kunnen maken voor de hele weg : type Kaart = [Section] help_jan::[Section]->[(Char,Int)] help_jan kaart = let (bestApath, bestBpath) = zoekPaden kaart ([],[]) --je berkent de beste paden die je vanboven doen uit komen (de A kant) en voor beneden (B kant) in if((sum[x|(a,x)<-bestApath]) < (sum[x|(a,x)<-bestBpath])) then reverse bestApath -- want we hebben het pad achterstevoeren opgebouwd else reverse bestBpath zoekPaden::[Section]->([(Char,Int)],[(Char,Int)])->([(Char,Int)],[(Char,Int)]) zoekPaden [] (pathA ,pathB) = (pathA ,pathB) --Je bent aangekomen in je eindpunt zoekPaden ( (Section n z b ):xs) (pathA,pathB) = let forwardA = (n + (sum[x|(a,x)<-pathA])) -- je bevindt je aan de A kant en je gaat gewoon rechtdoor crossOverA = (b + (z + (sum[x|(a,x)<-pathB])))-- je bevindt je aan de B kant en je gaat eerst over de brug en dan aan de A kan naar voor forwardB = (z + (sum[x|(a,x)<-pathB])) -- idem crossOverB = ( b+ (n + (sum[x|(a,x)<-pathA])))--idem newA |(forwardA<crossOverA) = ([('N',n)]++pathA)--kies het korste pad naar de nieuwe knoop aan de A kant |otherwise = ([('B',b),('Z',z)]++pathB) newB |(forwardB<crossOverB) =([('Z',z)]++pathB) |otherwise =([('B',b),('N',n)]++pathA) in zoekPaden xs (newA,newB) -- Doe de volgende stap
--Greet