Declaratieve Talen/oplossingenTeam

Uit Wina Examenwiki
Versie door Greet (overleg | bijdragen) op 17 jan 2011 om 12:52 (Nieuwe pagina aangemaakt met 'LET OP Deze oplossing werkt alleen voor groepjes van 2 omdat het alle groepen genereerd die mogelijk zijn, duurt het te lang om grotere groepen te maken <pre> % T te…')
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen

LET OP Deze oplossing werkt alleen voor groepjes van 2 omdat het alle groepen genereerd die mogelijk zijn, duurt het te lang om grotere groepen te maken


% T teams en in elk team moeten S studenten
% Deel1: verdeling(T,S,Verdeling)

verdeling(T,S,Verdeling):- X is T*S,
	                   numlist(1,X,List),
			   findall(List2,(maakTeams(List,S,List2)),List3),				   list_to_set(List3,List4),
			   sorteer(List4,List5),
			   list_to_set(List5,List6),
			   member(Verdeling,List6).

maakTeams([],_,[]).
maakTeams(List,S,[TeamS|Teams]):-maakTeam(List,S,Team1),
			               sort(Team1,TeamS),
				       findall(X,(member(X,List),\+member(X,TeamS)),Overige),
      				       maakTeams(Overige,S,Teams).

maakTeam(_,0,[]).
maakTeam(List,S,[A|Team]):-
	               S>0,
		       T is S-1,
		       maakTeam(List,T,Team),
		       member(A,List),
	               \+ member(A,Team).

sorteer([X],[X]).
sorteer([X,Y|Xs],[[L1|L2]|List]):-sort(X,[L1|L2]),
	                          sort(Y,[M1|M2]),
				  (
				  (L1==M1;(member(M,L2),(member(M,M2))))->
			            sorteer([[L1|L2]|Xs],List)
				   ;
			            sorteer([[M1|M2]|Xs],List)
			           ).

%Deel 2
groepeer(T,S,W,Schedule):-
	findall(Schedule2,(maak_schedule(T,S,W,[],Schedule1),sort(Schedule1,Schedule2)),Schedule3),
	list_to_set(Schedule3,Schedule4),
	member(Schedule,Schedule4).

%Deel 3
maak_schedule(_,_,0,S,S).
maak_schedule(T,S,W,HSchedule,[Sch|Schedule]):-
	verdeling(T,S,Sch),
	\+member(Sch,HSchedule),
	NewW is W-1,
	maak_schedule(T,S,NewW,[Sch|HSchedule],Schedule).

aantalwerkjes(T,S,W):-
	findall(Y,(verdeling(T,S,List),length(List,X),Y is X+1),List2),
	list_to_set(List2,Set),
	member(W,Set).



--Greet