Skip to content

Instantly share code, notes, and snippets.

@lovasoa
Last active April 24, 2016 16:14
Show Gist options
  • Select an option

  • Save lovasoa/c66f02a83026d634ed720f92cc4ef8f0 to your computer and use it in GitHub Desktop.

Select an option

Save lovasoa/c66f02a83026d634ed720f92cc4ef8f0 to your computer and use it in GitHub Desktop.
On a plusieurs tables, à chaque table ne peuvent se trouver que deux équipes. Il y a plusieurs tours, et à chaque tour chaque équipe change de table. Le but est de se faire rencontrer toutes les équipes, et que chaque équipe passe à chaque table.
% On organise un grand jeu. Il y a dix équipes, et neuf tables. À chaque tour de jeu,
% chaque table peut être soit occuppée, soit vide. Si elle est occuppée, alors deux équipes
% différentes s'y affrontent. À la fin du jeu, il faut que toutes les équipes se soient rencontrées,
% et que chacune soit passée par chaque table. Le but est d'organiser le jeu pour faire le
% moins de tours possible.
equipe(1..10).
table(1..9).
tour(1..20).
% On ne peut pas être à deux tables en même temps
:- equipe(E), tour(T), table(TABLE1), table(TABLE2), TABLE1 != TABLE2, participe(E, T, TABLE1), participe(E, T, TABLE2).
% Il ne peut y avoir plus de deux équipes à la même table en même temps
0{participe(A, TOUR, TABLE) : equipe(A) }2 :- table(TABLE), tour(TOUR).
% Une équipe ne peut pas participer seule
1{participe(B, TOUR, TABLE) : equipe(B), B!=A}1 :- equipe(A), table(TABLE), tour(TOUR), participe(A, TOUR, TABLE).
% Une équipe participe une seule fois à chaque table
1{participe(E, TOUR, TABLE) : tour(TOUR)}1 :- equipe(E), table(TABLE).
% Deux équipes ont combattu si elles ont participé à la même table en même temps
combattu(A,B) :- participe(A, TOUR, TABLE), participe(B, TOUR, TABLE), table(TABLE), tour(TOUR), A<B.
% Toutes les équipes doivent avoir combattu
:- equipe(A), equipe(B), A<B, not combattu(A,B).
% Un tour est joué si une personne a participé à un match
tourjoue(TOUR) :- tour(TOUR), participe(A, TOUR, TABLE), equipe(A), table(TABLE).
% Les tours joués sont consécutifs
:- not tourjoue(T1), tourjoue(T2), T2 != 1, T2 = T1 + 1.
% Chaque tour donne une pénalité
:~ tourjoue(TOUR), tour(TOUR). [1, TOUR]
#show participe/3.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment