Declaratieve Talen/oplossingWinkelen

Uit Wina Examenwiki
Versie door Greet (overleg | bijdragen) op 16 jan 2011 om 18:16 (Nieuwe pagina aangemaakt met '<pre> --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 = [Sectio…')
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen
--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