mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
/**
 | 
						|
 * Question 1.1
 | 
						|
 * combiner(+Buddies, -Pairs)
 | 
						|
 */
 | 
						|
combiner([], []).
 | 
						|
combiner([First|Buddies], Pairs):-
 | 
						|
	make_pairs(First, Buddies, Pairs1),
 | 
						|
	combiner(Buddies, Pairs2),
 | 
						|
	concat(Pairs1, Pairs2, Pairs).
 | 
						|
 | 
						|
/**
 | 
						|
 * make_pairs(+Buddy, +Buddies, -Pairs)
 | 
						|
 */
 | 
						|
make_pairs(Buddy, [], []).
 | 
						|
make_pairs(Buddy, [First|Buddies], [(Buddy, First)|Pairs]):-
 | 
						|
	make_pairs(Buddy, Buddies, Pairs).
 | 
						|
 | 
						|
/**
 | 
						|
 * concat(+X, +Y, ?T)
 | 
						|
 */
 | 
						|
concat([], Y, Y).
 | 
						|
concat([P|R], Y, [P|T]):-
 | 
						|
	concat(R, Y, T).
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * Question 1.2
 | 
						|
 * extraire(+AllPossiblePairs, +NbPairs, -Tp, -RemainingPairs)
 | 
						|
 */
 | 
						|
extraire(AllPossiblePairs, 0, [], AllPossiblePairs).
 | 
						|
extraire([PossiblePair|AllPossiblePairs], NbPairs, [PossiblePair|Tp], NewRemainingPairs):-
 | 
						|
	NbPairs > 0,
 | 
						|
	NewNbPairs is NbPairs - 1,
 | 
						|
	extraire(AllPossiblePairs, NewNbPairs, Tp, RemainingPairs),
 | 
						|
	not(pair_in_array(PossiblePair, Tp)),
 | 
						|
	delete_pair(RemainingPairs, PossiblePair, NewRemainingPairs).
 | 
						|
extraire([PossiblePair|AllPossiblePairs], NbPairs, Tp, [PossiblePair|RemainingPairs]):-
 | 
						|
	NbPairs > 0,
 | 
						|
	extraire(AllPossiblePairs, NbPairs, Tp, RemainingPairs),
 | 
						|
	pair_in_array(PossiblePair, Tp).
 | 
						|
 | 
						|
/**
 | 
						|
 * delete_pair(+Pairs, +Pair, -PairsWithoutPair)
 | 
						|
 */
 | 
						|
delete_pair([], _, []).
 | 
						|
delete_pair([Pair|Pairs], Pair, Pairs):-!.
 | 
						|
delete_pair([FirstPair|Pairs], Pair, [FirstPair|PairsWithoutPair]):-
 | 
						|
	delete_pair(Pairs, Pair, PairsWithoutPair).
 | 
						|
 | 
						|
/**
 | 
						|
 * pair_in_array(+Pair, +Pairs)
 | 
						|
 */
 | 
						|
pair_in_array((A, B), [(C, D)|Pairs]):-
 | 
						|
	(A == C ; B == D ; A == D ; B == C),
 | 
						|
	!.
 | 
						|
pair_in_array(Pair, [FirstPair|Pairs]):-
 | 
						|
	pair_in_array(Pair, Pairs).
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * Question 1.3
 | 
						|
 * les_tps(+Buddies, -Tps)
 | 
						|
 */
 | 
						|
les_tps(Buddies, Tps):-
 | 
						|
	combiner(Buddies, PossiblePairs),
 | 
						|
	length(Buddies, NbBuddies),
 | 
						|
	NbPairs is integer(NbBuddies / 2),
 | 
						|
	findall(Tp, extraire(PossiblePairs, NbPairs, Tp, _), Tps).
 |