Declaratieve Talen/oplossingenMijnen
maxproductie(Leveringen,(G,A,B)):- findall((C,D),(leverAanMijnen(Leveringen,[],[],C,D)),List), findall((C,D,Max),(member((C,D),List),max(C,X),max(D,Y),Max is X+Y),List2), maxList(List2,(A,B,G),G),!. leverAanMijnen([],A,B,A,B). leverAanMijnen([X|Xs],HmijnA,HmijnB,A,B):- length(HmijnA,C), length(HmijnB,D), ( C<(D/2)-> leverAanMijnen(Xs,[X|HmijnA],HmijnB,A,B) ; leverAanMijnen(Xs,HmijnA,[X|HmijnB],A,B) ). %basisgeval voor lijst met 3 of meer elementen, je moet hier ook in rekening brengen dat B en D ook ton opleveren. max([_-B,_-D,_-F],G):- ( \+B==D-> X = 3, ( \+D==F-> Y = 3 ; Y = 1 ) ; X = 2, ( \+ D==F-> Y = 2 ; Y = 1 )), G is (X+Y). %In het algemene geval moet je alleen testen op of de laatste in de rij (F) verschilt van zijn 2 vorige of alleen de vorige. max([_-B,C-D,E-F|Xs],G):- max([C-D,E-F|Xs],T), ( \+B==D-> ( \+D==F-> Y = 3 ; Y = 1 ) ; ( \+ D==F-> Y = 2 ; Y = 1 )), G is (T+(Y)),!. %Geval er zit maar 1 element in de lijst max([_X],1). %Geval er ziten maar 2 elemeent in de lijst max([_-B,_-D],G):-( \+ B==D-> G is 3 ; G is 2 ). %haal de maximumproductie uit de lijst maxList([(A,B,X)],(A,B,X),X). maxList([(_,_,X)|List],Mine,Max):- maxList(List,Mine1,Max1), ( X > Max1-> Max=X ; Max=Max1, Mine=Mine1 ).
--Greet