Guest User

Untitled

a guest
Apr 21st, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.60 KB | None | 0 0
  1. :-use_module(library(clpfd)).
  2.  
  3. %encaixe para fora - 1; encaixe para dentro - 0; A representacao comeca da face esquerda e da a volta no sentido horario
  4. peca(1,[0,1,1,0]).
  5. peca(2,[0,0,1,1]).
  6. peca(3,[1,0,0,1]).
  7. peca(4,[0,1,0,0]).
  8. peca(5,[1,1,1,0]).
  9. peca(6,[0,0,0,0]).
  10. peca(7,[1,1,0,0]).
  11. peca(8,[0,0,1,0]).
  12. peca(9,[1,1,1,1]).
  13. peca(10,[1,0,1,0]).
  14. peca(11,[1,1,0,1]).
  15. peca(12,[0,1,0,1]).
  16. pecaV1([0,0,0]).
  17. pecaV2([1,0,0,0]).
  18. pecaV3([1,1,1]).
  19. pecaV4([1,1,1,0]).
  20.  
  21. %pecas "virtuais", encaixe para dentro do tabuleiro - 0, encaixe para fora - 1
  22. %pecaEsquerdaBaixo([1,_,_,1]).
  23. %pecaEsquerdaMeio([1,_,_,_]).
  24. %pecaEsquerdaCima([1,1,_,_]).
  25. %PecaCimaEsquerda([_,0,_,_]).
  26. %PecaCimaDireita([_,0,_,_]).
  27. %pecaDireitaCima([_,0,0,_]).
  28. %pecaDireitaMeio([_,_,0,_]).
  29. %pecaDireitaBaixo([_,_,0,1]).
  30. %pecaBaixoDireita([_,_,_,0]).
  31. %pecaBaixoEsquerda([_,_,_,0]).
  32.  
  33. test([5, 2, 8, 6, 11, 10, 1, 4, 3, 9, 12, 7]).
  34. coiso:- test(X), rapids(X).
  35.  
  36. encaixaEsquerdaBorder(PecaV1, C, P2) :-
  37. element(C, PecaV1, D),
  38. element(1, P2, E),
  39. E+D #= 1.
  40.  
  41. encaixaCimaBorder(PecaV2, C, P2):-
  42. element(C, PecaV2, B),
  43. element(2, P2, C1),
  44. B+C1 #= 1.
  45.  
  46. encaixaDireitaBorder(PecaV3, C, P2):-
  47. element(C, PecaV3, E),
  48. element(3, P2, D),
  49. E+D #= 1.
  50.  
  51. encaixaBaixoBorder(PecaV4, C, P2):-
  52. element(C, PecaV4, B),
  53. element(4, P2, C),
  54. B+C #= 1.
  55.  
  56.  
  57. encaixaDireita(PE,PD):-
  58. element(3,PE,E),
  59. element(1,PD,D),
  60. E+D #= 1.
  61. encaixaCima(PC,PB):-
  62. element(4,PC,C),
  63. element(2,PB,B),
  64. C+B #= 1.
  65.  
  66.  
  67.  
  68. rapids(Vars):-
  69. pecaV1(PecaV1),
  70. pecaV2(PecaV2),
  71. pecaV3(PecaV3),
  72. pecaV4(PecaV4),
  73. %0 - orientacao para a direita
  74. %write('Insere orientacao 0 ou 1: '),
  75. %read(O),
  76. length(Vars,12),
  77. domain(Vars,1,12),
  78. all_distinct(Vars),
  79. element(1,Vars,P1),
  80. element(2,Vars,P2),
  81. element(3,Vars,P3),
  82. element(4,Vars,P4),
  83. element(5,Vars,P5),
  84. element(6,Vars,P6),
  85. element(7,Vars,P7),
  86. element(8,Vars,P8),
  87. element(9,Vars,P9),
  88. element(10,Vars,P10),
  89. element(11,Vars,P11),
  90. element(12,Vars,P12),
  91. peca(P1,C1),
  92. peca(P2,C2),
  93. peca(P3,C3),
  94. peca(P4,C4),
  95. peca(P5,C5),
  96. peca(P6,C6),
  97. peca(P7,C7),
  98. peca(P8,C8),
  99. peca(P9,C9),
  100. peca(P10,C10),
  101. peca(P11,C11),
  102. peca(P12,C12),
  103.  
  104. %%%%encaixe lateral
  105. encaixaDireita(C1,C2),
  106. encaixaDireita(C2,C3),
  107. encaixaDireita(C3,C4),
  108. encaixaDireita(C5,C6),
  109. encaixaDireita(C6,C7),
  110. encaixaDireita(C7,C8),
  111. encaixaDireita(C9,C10),
  112. encaixaDireita(C11,C12),
  113.  
  114. %%%%Encaixes Cima
  115. encaixaCima(C1,C5),
  116. encaixaCima(C2,C6),
  117. encaixaCima(C3,C7),
  118. encaixaCima(C4,C8),
  119. encaixaCima(C5,C9),
  120. encaixaCima(C6,C10),
  121. encaixaCima(C7,C11),
  122. encaixaCima(C8,C12),
  123.  
  124. %%%%Encaixa Border Esquerda
  125. encaixaDireitaBorder(PecaV1, 1, C9),
  126. encaixaDireitaBorder(PecaV1, 2, C5),
  127. encaixaDireitaBorder(PecaV1, 3, C1),
  128.  
  129. %%%%Encaixa Border Cima
  130. encaixaCimaBorder(PecaV2, 1, C1),
  131. encaixaCimaBorder(PecaV2, 2, C2),
  132. encaixaCimaBorder(PecaV2, 3, C3),
  133. encaixaCimaBorder(PecaV2, 4, C4),
  134.  
  135. %%%%Encaixa Border Direita
  136. encaixaEsquerdaBorder(PecaV3, 1, C4),
  137. encaixaEsquerdaBorder(PecaV3, 2, C8),
  138. encaixaEsquerdaBorder(PecaV3, 3, C12),
  139.  
  140. %%%%Encaixa Border Baixo
  141. encaixaBaixoBorder(PecaV4, 4, C12),
  142. encaixaBaixoBorder(PecaV4, 3, C11),
  143. encaixaBaixoBorder(PecaV4, 2, C10),
  144. encaixaBaixoBorder(PecaV4, 1, C9),
  145. labeling([],Vars).
Add Comment
Please, Sign In to add comment