1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
%--------------------------------------------------------------------
% Explications liminaires
%--------------------------------------------------------------------
% On exprime l'existence de chacune des 52 cartes d'un jeu de cartes
% par un prédicat carte/5 de structure:
% carte(?Id, ?C, ?R, ?PH, ?Nm) avec:
% Id: l'index de la carte (un entier compris entre 1 et 52)
% C: l'indice de la couleur
% (1 = Pique, 2 = Coeur, 3 = Carreau, 4 = Trèfle)
% R: le rang de la carte (de 1 pour un 2 à 13 pour un As)
% PH: la valeur en Points d'Honneur de la carte
% (un As: 4, un Roi: 3, une Dame: 2, un Valet: 1, les autres: 0)
% Nm: le nom de la carte (ex: 'AP', 'RK', '5T', ..)
%
% Exemple: l'As de pique
% carte(1,1,13,4,'AP')
%---------------------------------------------------------------------
%%----------------------------------------------------------------
%% Essai ultra-simple de satisfaction de contraintes
%% ---------------------------------------------------------------
%% But: Obtenir une main de 4 cartes,
%% sans aucune contrainte sur chaque carte (pour le moment !)
%% ---------------------------------------------------------------
getmain :-
Index = [I1,I2,I3,I4], % les index de 4 cartes
Index in 1..52, % les 52 index de cartes
Cs = [C1,C2,C3,C4], % les codes-couleur de chaque carte
Cs in 1..4, % 1 = pique, 2 = coeur, 3 = carreau, 4 = trefle
get_c_ph(I1,C1,_), % liens entre chaque index Ii
get_c_ph(I2,C2,_), % et le code-couleur correspondant Ci
get_c_ph(I3,C3,_), % Exemples: As de pique: I1 = 1, C1 = 1
get_c_ph(I4,C4,_), % 2 de trèfle: I52 = 52, C52 = 4
all_different(Index), % unique contrainte appliquée
label(Index), % résolution des contraintes
% --- affichage des résultats ----------
printmain(Index),
nl, printlist(Cs),
nombre_piques(Index, N1), nl, write(N1),
nombre_coeurs(Index, N2), nl, write(N2),
nombre_carreaux(Index, N3), nl, write(N3),
nombre_trefles(Index, N4), nl, write(N4).
/* ------------------- Exécution sous SWI-PROLOG --------------------------
1 ?-
library(clp/clp_events) compiled into clp_events 0.00 sec, 2,868 bytes
library(clp/bounds) compiled into bounds 0.03 sec, 83,492 bytes
d:/codes PLC/plc_5.pl compiled 0.03 sec, 94,276 bytes
1 ?- getmain.
AP RP DP VP % les 4 cartes solution (on est passé de l'index au nom)
1 1 1 1 % les 4 code-couleur
4 % le nombre de piques
0 % le nombre de coeurs
0 % le nombre de carreaux
0 % le nombre de trèfles
Yes
------------------------------------------------------------------------ */ |
Partager