% -----------------------------------------------
%                    Exercice 4
%           Florian Lepot & Maxime Fabre
% -----------------------------------------------

% Question 1
% -------------------------

% Titre : Vérifie que X est un élément de L
% Prédicat : choisir/2
% Usage : choisir(?Element, ?Liste)

choisir(X, L) :-
            member(X, L).



% Question 2
% -------------------------

% Titre : Vérifie que LP est une version permutée de L
% Prédicat : permutation/2
% Usage : permutation(?Liste, ?Liste)

permutation([],[]).

permutation([X|L], LP) :-
                    permutation(L, L1),
                    select(X, LP, L1).



% Question 3
% -------------------------

% Titre : Vérifie que L est une permutation de la liste [1, 2, 3, 4, 5, 6]
% Prédicat : generer/1
% Usage : generer(?Liste)

generer(L) :-
            L = [N1, N2, N3, N4, N5, N6],
            permutation([1,2,3,4,5,6], [N1, N2, N3, N4, N5, N6]),
            tester(L).



% Question 4
% -------------------------

% Titre : Vérifie que la somme de chaque côté du triangle est égale
% Prédicat : tester/1
% Usage : tester(?Liste)

tester([N1, N2, N3, N4, N5, N6]) :-
                                S1 is (N1 + N2 + N3),
                                S2 is (N3 + N4 + N5),
                                S3 is (N5 + N6 + N1),
                                S1=S2,
                                S2=S3.



% Question 5
% -------------------------

% Titre : Vérifie que le triangle est valide
% Prédicat : solution/1
% Usage : solution(?Liste)

solution(X) :-
            generer(X), !.



% Question 6
% -------------------------

% Titre : Compte le nombre de solutions
% Prédicat : nbsolutions/1
% Usage : nbsolutions(?Int)

nbsolutions(S) :-
            bagof(X,solution(X),X),
            length(X,S).