Skip to content

Instantly share code, notes, and snippets.

@jneira
Created January 28, 2011 00:16
Show Gist options
  • Save jneira/799581 to your computer and use it in GitHub Desktop.
Save jneira/799581 to your computer and use it in GitHub Desktop.
%% Carta mas alta=valor carta
%% Pareja=30
%% Trio=60
%% Doble pareja=90
%% Full=120
%% Color=150
%% Poker=180
%% Escalera color=210
consecutivos([]).
consecutivos([_]).
consecutivos([[X|_],[Y|_]|T]):-
Y is X+1,consecutivos(T).
agrupar(X,[],[[X]]).
agrupar([X,P1],[[[X,P2]|TX]|T],[[[X,P1],[X,P2]|TX]|T]):-!.
agrupar(X,[HS|T],[HS|TS]):-agrupar(X,T,TS).
agruparLista([],XS,XS).
agruparLista([H|T],XS,S):-
agrupar(H,XS,S1),
agruparLista(T,S1,S).
ocurrencias([],[]).
ocurrencias([[H|HT]|T],[[L,H]|ST]):-
ocurrencias(T,ST),
length([H|HT],L).
jugada(Cartas,S):-
sort(Cartas,S1),
agruparLista(S1,[],S2),
ocurrencias(S2,S3),
((poker(S3,X),S is 180+X);
(full(S3,[X,Y]),S is 120+(X+1)+Y);
(doblePareja(S3,[X,Y]),S is 90+X+Y);
(trio(S3,X),S is 60+X);
(pareja(S3,X),S is 30+X);
(color(Cartas,S));
last(S1,[S,_])).
poker(XS,S):-member([4,[S|_]],XS).
full(XS,[X,Y]):-member([3,[X|_]],XS),member([2,[Y|_]],XS).
mismoPalo([[_,X]],X).
mismoPalo([[_,X]|T],X):-mismoPalo(T,X).
color(XS,S):-sort(XS,YS),mismoPalo(YS,_),
(consecutivos(YS),last(YS,[X|_]),S is 210+X);
S is 150.
doblePareja(XS,[X,Y]):-member([2,[X|_]],XS),member([2,[Y|_]],XS),Y\=X.
trio(XS,S):-member([3,[S|_]],XS).
pareja(XS,S):-member([2,[S|_]],XS).
jugadas([],[]).
jugadas([H|T],[[S|H]|TS]):-
jugada(H,S),jugadas(T,TS).
mejor_jugada(JS,S):-jugadas(JS,S1),sort(S1,S2),last(S2,[_|S]).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment