Advertisement
Guest User

Untitled

a guest
May 28th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 9.13 KB | None | 0 0
  1. % Autor:
  2. % Fecha: 28/05/2010
  3.  
  4. % Author: LFaletti y RFerroMoreno
  5.  
  6. % Prolog
  7.  
  8. :- dynamic recorrido/3.
  9.  
  10. %:- dynamic ocupado/3.
  11.  
  12. %:- dynamic recorrido/3.
  13.  
  14. %jugada_Valida(COLOR,X,Y):-not ocupado(COLOR,X,Y), not suicidio(COLOR,X,Y).
  15.  
  16. jugada_Valida(COLOR,X,Y):- not(ocupado(_,X,Y)).
  17.  
  18.  
  19.  
  20. %es_capturada(COLOR,X,Y):-es_capturada(
  21.  
  22. %suicidio(b,X,Y):-
  23.  
  24. ocupado(n,8,6).
  25. ocupado(b,8,7).
  26. ocupado(n,9,6).
  27. ocupado(b,9,7).
  28. ocupado(n,10,6).
  29. ocupado(b,10,7).
  30. ocupado(n,11,6).
  31. ocupado(b,10,8).
  32. ocupado(n,11,7).
  33. ocupado(b,9,8).
  34. ocupado(n,11,8).
  35. ocupado(b,10,9).
  36. ocupado(n,11,9).
  37. ocupado(b,10,10).
  38. ocupado(n,11,10).
  39. ocupado(b,9,9).
  40. ocupado(n,10,11).
  41. ocupado(b,9,10).
  42. ocupado(n,10,12).
  43. ocupado(b,9,11).
  44. ocupado(n,9,12).
  45. ocupado(b,5,11).
  46. ocupado(n,8,11).
  47. ocupado(b,5,8).
  48. ocupado(n,8,10).
  49. ocupado(b,4,6).
  50. ocupado(n,8,9).
  51. ocupado(b,3,8).
  52. ocupado(n,8,8).
  53. ocupado(b,4,4).
  54. ocupado(n,7,7).
  55.  
  56.  
  57.  
  58. %solve(C,1):-clause(C,B), B==true.
  59.  
  60. %solve((C,C2),CANT):-solve(C,CANT1),solve(C2,CANT2),CANT is CANT1+CANT2.
  61.  
  62. %solve(C,CANT):-clause(C,BODY), BODY\==true, solve(BODY,CANT2), CANT is CANT2+1.
  63.  
  64.  
  65.  
  66.  
  67.  
  68. solve(true).
  69.  
  70. solve((A,B)):- solve(A), solve(B).
  71.  
  72. solve(A):- clause(A,B), B\==true, solve(B).
  73.  
  74.  
  75.  
  76. and(A,B):- solve(A), solve(B).
  77.  
  78. andE(A,B,C,D):- solve(A), solve(B), solve(C), solve(D).
  79.  
  80.  
  81.  
  82. %capt(C,X,Y):- X1 is X-1, X2 is X+1, Y1 is Y-1, Y2 is Y+1, NC\==C,
  83.  
  84. %              (ocupado(NC,X1,Y) ; (ocupado(C,X1,Y), recorrido(C,X1,Y)) ; (ocupado(C,X1,Y),not(recorrido(C,X1,Y)), assert(recorrido(C,X,Y)), capt(C,X1,Y), retract(recorrido(C,X,Y)))),
  85.  
  86. %              (ocupado(NC,X2,Y) ; (ocupado(C,X2,Y), recorrido(C,X2,Y)) ; (ocupado(C,X2,Y),not(recorrido(C,X2,Y)), assert(recorrido(C,X,Y)), capt(C,X2,Y), retract(recorrido(C,X,Y)))),
  87.  
  88. %              (ocupado(NC,X,Y1) ; (ocupado(C,X,Y1), recorrido(C,X,Y1)) ; (ocupado(C,X,Y1),not(recorrido(C,X,Y1)), assert(recorrido(C,X,Y)), capt(C,X,Y1), retract(recorrido(C,X,Y)))),
  89.  
  90. %              (ocupado(NC,X,Y2) ; (ocupado(C,X,Y2), recorrido(C,X,Y2)) ; (ocupado(C,X,Y2),not(recorrido(C,X,Y2)), assert(recorrido(C,X,Y)), capt(C,X,Y2), retract(recorrido(C,X,Y)))).
  91.  
  92.  
  93.  
  94. % capt(C,X,Y):- X1 is X-1, X2 is X+1, Y1 is Y-1, Y2 is Y+1, NC\==C,
  95. %               ocupado(C1,X1,Y),
  96. %               ocupado(C2,X2,Y),
  97. %               ocupado(C3,X,Y1),
  98. %               ocupado(C4,X,Y2),
  99. %               (ocupado(NC,X1,Y) ; (ocupado(C,X1,Y), recorrido(C,X1,Y)) ; (ocupado(C,X1,Y),not(recorrido(C,X1,Y)),recorrido(C,X,Y),capt(C,X1,Y)) ; (ocupado(C,X1,Y),not(recorrido(C,X1,Y)), not(recorrido(C,X,Y)), assert(recorrido(C,X,Y)), capt(C,X1,Y))),
  100. %
  101. %               (ocupado(NC,X2,Y) ; (ocupado(C,X2,Y), recorrido(C,X2,Y)) ; (ocupado(C,X2,Y),not(recorrido(C,X2,Y)),recorrido(C,X,Y),capt(C,X2,Y)) ; (ocupado(C,X2,Y),not(recorrido(C,X2,Y)), not(recorrido(C,X,Y)), assert(recorrido(C,X,Y)), capt(C,X2,Y))),
  102. %
  103. %               (ocupado(NC,X,Y1) ; (ocupado(C,X,Y1), recorrido(C,X,Y1)) ; (ocupado(C,X,Y1),not(recorrido(C,X,Y1)),recorrido(C,X,Y),capt(C,X2,Y)) ; (ocupado(C,X,Y1),not(recorrido(C,X,Y1)), not(recorrido(C,X,Y)), assert(recorrido(C,X,Y)), capt(C,X,Y1))),
  104. %
  105. %               (ocupado(NC,X,Y2) ; (ocupado(C,X,Y2), recorrido(C,X,Y2)) ; (ocupado(C,X,Y2),not(recorrido(C,X,Y2)),recorrido(C,X,Y),capt(C,X,Y2)) ; (ocupado(C,X,Y2),not(recorrido(C,X,Y2)), not(recorrido(C,X,Y)), assert(recorrido(C,X,Y)), capt(C,X,Y2))).
  106.  
  107. limpiar:-retractall(recorrido(X,Y,Z)).
  108.  
  109. % verificar_captura(b,X,Y):-X1 is X-1, ocupado(n,X1,Y),capt(n,X1,Y).
  110. % verificar_captura(b,X,Y):-X2 is X+1, ocupado(n,X2,Y),capt(n,X2,Y).
  111. % verificar_captura(b,X,Y):-Y1 is Y-1, ocupado(n,X,Y1),capt(n,X,Y1).
  112. % verificar_captura(b,X,Y):-Y2 is Y+1, ocupado(n,X,Y2),capt(n,X,Y2).
  113. %
  114. % verificar_captura(n,X,Y):-X1 is X-1, ocupado(b,X1,Y),capt(b,X1,Y).
  115. % verificar_captura(n,X,Y):-X2 is X+1, ocupado(b,X2,Y),capt(b,X2,Y).
  116. % verificar_captura(n,X,Y):-Y1 is Y-1, ocupado(b,X,Y1),capt(b,X,Y1).
  117. % verificar_captura(n,X,Y):-Y2 is Y+1, ocupado(b,X,Y2),capt(b,X,Y2).
  118.  
  119. capt(b,X,Y):- X1 is X-1, X2 is X+1, Y1 is Y-1, Y2 is Y+1,
  120.               ocupado(C1,X1,Y),
  121.               ocupado(C2,X2,Y),
  122.               ocupado(C3,X,Y1),
  123.               ocupado(C4,X,Y2),
  124.               ( ocupado(n,X1,Y) ; ocupado(p,X1,Y) ; ( ocupado(b,X1,Y), (recorrido(b,X1,Y) ; (not(recorrido(b,X1,Y)), assert(recorrido(b,X,Y)), capt(b,X1,Y))))),
  125.  
  126.               ( ocupado(n,X2,Y) ; ocupado(p,X2,Y) ; ( ocupado(b,X2,Y), (recorrido(b,X2,Y) ; (not(recorrido(b,X2,Y)), assert(recorrido(b,X,Y)), capt(b,X2,Y))))),
  127.  
  128.               ( ocupado(n,X,Y1) ; ocupado(p,X,Y1) ; ( ocupado(b,X,Y1), (recorrido(b,X,Y1) ; (not(recorrido(b,X,Y1)), assert(recorrido(b,X,Y)), capt(b,X,Y1))))),
  129.  
  130.               ( ocupado(n,X,Y2) ; ocupado(p,X,Y2) ; ( ocupado(b,X,Y2), (recorrido(b,X,Y2) ; (not(recorrido(b,X,Y2)), assert(recorrido(b,X,Y)), capt(b,X,Y2))))).
  131.  
  132. capt(n,X,Y):- X1 is X-1, X2 is X+1, Y1 is Y-1, Y2 is Y+1,
  133.               ocupado(C1,X1,Y),
  134.               ocupado(C2,X2,Y),
  135.               ocupado(C3,X,Y1),
  136.               ocupado(C4,X,Y2),
  137.               ( ocupado(b,X1,Y) ; ocupado(p,X1,Y) ; ( ocupado(n,X1,Y), (recorrido(n,X1,Y) ; (not(recorrido(n,X1,Y)), assert(recorrido(n,X,Y)), capt(n,X1,Y))))),
  138.  
  139.               ( ocupado(b,X2,Y) ; ocupado(p,X2,Y) ; ( ocupado(n,X2,Y), (recorrido(n,X2,Y) ; (not(recorrido(n,X2,Y)), assert(recorrido(n,X,Y)), capt(n,X2,Y))))),
  140.  
  141.               ( ocupado(b,X,Y1) ; ocupado(p,X,Y1) ; ( ocupado(n,X,Y1), (recorrido(n,X,Y1) ; (not(recorrido(n,X,Y1)), assert(recorrido(n,X,Y)), capt(n,X,Y1))))),
  142.  
  143.               ( ocupado(b,X,Y2) ; ocupado(p,X,Y2) ; ( ocupado(n,X,Y2), (recorrido(n,X,Y2) ; (not(recorrido(n,X,Y2)), assert(recorrido(n,X,Y)), capt(n,X,Y2))))).
  144.              
  145.              
  146. verif(b,X,Y):-X1 is X-1, X2 is X+1, Y1 is Y-1, Y2 is Y+1,
  147.               ( color_capturado(n,X1,Y);color_capturado(n,X2,Y);color_capturado(n,X,Y1);color_capturado(n,X,Y2) ).
  148.              
  149. verif(n,X,Y):-X1 is X-1, X2 is X+1, Y1 is Y-1, Y2 is Y+1,
  150.                  ( color_capturado(b,X1,Y);color_capturado(b,X2,Y);color_capturado(b,X,Y1);color_capturado(b,X,Y2) ).
  151.                  
  152.  
  153. algun_vacio(X,Y):- X1 is X-1, X2 is X+1, Y1 is Y-1, Y2 is Y+1,
  154.                    ( not(ocupado(C1,X1,Y)) ; not(ocupado(C2,X2,Y)) ; not(ocupado(C3,X,Y1)) ; not(ocupado(C4,X,Y2)) ).
  155.  
  156. colores_alrededor(X,Y,IZQ,DER,ARR,ABA):- X1 is X-1, X2 is X+1, Y1 is Y-1, Y2 is Y+1,
  157.                                      ( (not(ocupado(IZQ,X1,Y)), IZQ=v) ; ocupado(IZQ,X1,Y) ),
  158.                                      ( (not(ocupado(DER,X2,Y)), DER=v) ; ocupado(DER,X2,Y) ),
  159.                                      ( (not(ocupado(ABA,X,Y1)), ABA=v) ; ocupado(ABA,X,Y1) ),
  160.                                      ( (not(ocupado(ARR,X,Y2)), ARR=v) ; ocupado(ARR,X,Y2) ).
  161.  
  162.  
  163. %fucking mierda pero buscar no debe fallar nunca porque es un recorredor!
  164. buscar(C,X,Y):-X1 is X-1, X2 is X+1, Y1 is Y-1, Y2 is Y+1,
  165.                   %visitar
  166.                   assert(recorrido(C,X,Y)),
  167.                   %si a izquierda mismo color y no recorrido ent. buscar y no fallar, sino no fallar.
  168.                   ( (ocupado(C,X1,Y), not(recorrido(C,X1,Y)), buscar(C,X1,Y)); ( not(ocupado(C,X1,Y));recorrido(C,X1,Y)) ),
  169.                   %si a derecha mismo color y no recorrido ent. buscar y no fallar, sino no fallar.
  170.                   ( (ocupado(C,X2,Y), not(recorrido(C,X2,Y)), buscar(C,X2,Y)); ( not(ocupado(C,X2,Y));recorrido(C,X2,Y)) ),
  171.                   % arriba
  172.                   ( (ocupado(C,X,Y2), not(recorrido(C,X,Y2)), buscar(C,X,Y2)); ( not(ocupado(C,X,Y2));recorrido(C,X,Y2)) ),
  173.                   % abajo
  174.                   ( (ocupado(C,X,Y1), not(recorrido(C,X,Y1)), buscar(C,X,Y1)); ( not(ocupado(C,X,Y1));recorrido(C,X,Y1)) ).
  175.                  
  176.  
  177. %Un color y coordenadas de punto de partida para buscar (por C)
  178. color_capturado(C,X,Y):- %limpiar cualquier recorrido anterior
  179.                          retractall(recorrido(X,Y,Z)),
  180.                          %obtener bloque hipoteticamente capturado
  181.                          buscar(C,X,Y),
  182.                          % Verificar que cada ficha del bloque tiene en sus adyacentes:
  183.                          %  una ficha de color contrario,
  184.                          %  o bien una ficha del mismo color.
  185.                          
  186.                          % Buscar por todos los recorridos tales que tengan algun espacio vacío alrededor
  187.                          % si R es vacío entonces el conjunto está capturado por el color contrario,
  188.                          % sino no hay captura
  189.                          findall([X_,Y_], ( recorrido(C,X_,Y_),algun_vacio(X_,Y_) ), R),
  190.                          R==[]. %hay captura.
  191.                          
  192. verificar_captura(b,X,Y):-X1 is X-1, ocupado(n,X1,Y),color_capturado(n,X1,Y).
  193. verificar_captura(b,X,Y):-X2 is X+1, ocupado(n,X2,Y),color_capturado(n,X2,Y).
  194. verificar_captura(b,X,Y):-Y1 is Y-1, ocupado(n,X,Y1),color_capturado(n,X,Y1).
  195. verificar_captura(b,X,Y):-Y2 is Y+1, ocupado(n,X,Y2),color_capturado(n,X,Y2).
  196.  
  197. verificar_captura(n,X,Y):-X1 is X-1, ocupado(b,X1,Y),color_capturado(b,X1,Y).
  198. verificar_captura(n,X,Y):-X2 is X+1, ocupado(b,X2,Y),color_capturado(b,X2,Y).
  199. verificar_captura(n,X,Y):-Y1 is Y-1, ocupado(b,X,Y1),color_capturado(b,X,Y1).
  200. verificar_captura(n,X,Y):-Y2 is Y+1, ocupado(b,X,Y2),color_capturado(b,X,Y2).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement