Advertisement
Guest User

gay.pl

a guest
Jan 23rd, 2020
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.73 KB | None | 0 0
  1.  
  2. use_module(library(write)).
  3. use_module(library(clpfd)).
  4. %findall(X,(line(X,3),count2(X,2)),Z).
  5. %Z = [[1, 1, 0], [1, 0, 1], [0, 1, 1]].
  6. %[[1],[3],[1,1,1],[1],[1]],[[1],[1],[5],[1],[1]],[[0,0,1,0,0],[0,1,1,1,0],[1,0,1,0,1],[0,0,1,0,0],[0,0,1,0,0]]
  7. %?-nonograma([[1],[3],[1,1,1],[1],[1]],[[1],[1],[5],[1],[1]],[[0,0,1,0,0],[0,1,1,1,0],[1,0,1,0,1],[0,0,1,0,0],[0,0,1,0,0]],_).
  8. %nanograma(Linhas,Colunas). true se for um nanograma
  9. %puzzle([[[1,1], [2,1,2],[2,1,1,2],[5,1,1,5],[4,1,1,5],[3,2,4],[3,4,4],[11],[4],[3,4,3],[10],[6,2],[11],[2,6],[10],[2,4,2],[4],[2,2],[8],[2,1,1,2],[2,2,2,2],[4,4],[8]],[[2],[5,1,1], [7,1,2,1,1],[5,2,1,2,3],[3,2,1,1,1,2,2],[1,5,2,3],[2,17],[12,1,1],[12,1,1],[2,17],[1,5,2,3],[2,1,1,1,2,2],[6,2,1,2,3],[5,1,1,1,1],[7,1,1],[5],[2]]]).
  10. %puzzle([[[1],[3],[1,1,1],[1],[1]],[[1],[1],[5],[1],[1]]]).
  11. puzzle([H,T]):-nanograma(H,T).
  12. nanograma(ConsL,ConsC):-
  13. length(ConsL,NL),
  14. length(ConsC,NC),
  15. matrix(Linhas,Colunas,NL,NC),
  16. casos_possiveis(ConsL,NL,NC,CPLinhas),
  17. casos_possiveis(ConsC,NC,NL,CPColunas),
  18. resolve(Linhas,CPLinhas),
  19. resolve(Colunas,CPColunas),
  20. write('casospossiveis\n'),write(CPLinhas),write('\nMATRIX\n'),write(Linhas).
  21.  
  22. %resolve().
  23. resolve([],_).
  24. resolve([H1|T1],[H3|T3]):-
  25. member(H1,H3),
  26. resolve(T1,T3).
  27.  
  28. %resolve([HL|TL],[HC,HL],[H1|H2],)
  29. %casos_possiveis(ConsL,N,CPLinhas)
  30. casos_possiveis([],0,_,_).
  31. casos_possiveis([H|T],NL,NC,CPLinhas):-
  32. length(CPLinhas,NL),
  33. NL1 is NL-1,
  34. casos_possiveis(T,NL1,NC,Casos2),
  35. findall(Linha,list_exe(H,Linha,NC),Casos),
  36. append(Casos2,[Casos],CPLinhas).
  37.  
  38. %gera uma matrix com NL*NC tamanho
  39. matrix(Linhas,Colunas,NL,NC):-
  40. length(Linhas,NL),
  41. length(Colunas,NC),
  42. transpose(Linhas,Colunas).
  43.  
  44.  
  45.  
  46. transpose([], []).
  47. transpose([F|Fs], Ts) :-
  48. transpose(F, [F|Fs], Ts).
  49.  
  50. transpose([], _, []).
  51. transpose([_|Rs], Ms, [Ts|Tss]) :-
  52. lists_firsts_rests(Ms, Ts, Ms1),
  53. transpose(Rs, Ms1, Tss).
  54.  
  55. lists_firsts_rests([], [], []).
  56. lists_firsts_rests([[F|Os]|Rest], [F|Fs], [Os|Oss]) :-
  57. lists_firsts_rests(Rest, Fs, Oss).
  58.  
  59. %Lista é uma linha com N tamanho com 0s ou 1s
  60. line([],0).
  61. line([H|T],X):-
  62. length([H|T],X),
  63. line(T,X1),
  64. X is X1+1,
  65. (H=0;
  66. H=1).
  67.  
  68. %List2 com tamanho N é uma possivel solucao para List1
  69. %list_exe(List1,List2,N).
  70. %List2 e a linha e List1 e a constraint
  71.  
  72. list_exe([],[],0).
  73. list_exe(List1,List2,N):-
  74. line(List2,N),
  75. soma_lista(List1,X),
  76. count(List2,X),
  77. teste(List1,List2).
  78.  
  79. teste([],[]).
  80. teste([H1|T1],Linha):-
  81. T1 \= [],
  82. tirar_zeros(Linha,Linha2),
  83. teste2(H1,Linha2,Linha3),
  84. verifica_espaco(Linha3,Linha4),
  85. teste(T1,Linha4).
  86.  
  87. teste([H1|[]],Linha):-
  88. tirar_zeros(Linha,Linha2),
  89. teste2(H1,Linha2,Linha3),
  90. tirar_zeros(Linha3,Linha4),
  91. teste([],Linha4).
  92.  
  93. tirar_zeros(Linha,Linha).
  94. tirar_zeros([0|T],Linha):-
  95. tirar_zeros(T,Linha).
  96. %recebe um numero(X) da lista, e diz se a list tem X 1s seguidos
  97.  
  98. teste2(0,Linha,Linha).
  99. teste2(X,[1|T],Linha):-
  100. X>0,
  101. X1 is X-1,
  102. teste2(X1,T,Linha).
  103.  
  104. %verifica_espaco(Linha1,Linha2)
  105. %retorna True se Linha2 é a Linha1 com menos um espaco
  106. verifica_espaco([0|Linha],Linha).
  107.  
  108. %soma os valores da lista
  109. soma_lista([],0).
  110. soma_lista(A,B):-soma_lista(A,B,0).
  111. soma_lista([],A,A).
  112. soma_lista([A|A1],B,C):- C1 is A+C, soma_lista(A1,B,C1).
  113.  
  114. %conta os nr pintados de uma linha
  115. %count(List,N).
  116.  
  117. count(List,X):-
  118. soma_lista(List,X).
  119. ?puzzle([[[1,1], [2,1,2],[2,1,1,2],[5,1,1,5],[4,1,1,5],[3,2,4],[3,4,4],[11],[4],[3,4,3],[10],[6,2],[11],[2,6],[10],[2,4,2],[4],[2,2],[8],[2,1,1,2],[2,2,2,2],[4,4],[8]],[[2],[5,1,1], [7,1,2,1,1],[5,2,1,2,3],[3,2,1,1,1,2,2],[1,5,2,3],[2,17],[12,1,1],[12,1,1],[2,17],[1,5,2,3],[2,1,1,1,2,2],[6,2,1,2,3],[5,1,1,1,1],[7,1,1],[5],[2]]]).
  120. %findall(X,(line(X,3),count2(X,2)),Z).
  121. %Z = [[1, 1, 0], [1, 0, 1], [0, 1, 1]].
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement