fork download
  1. %パズルコレクション パズル第71号 数字パズル を解くPrologコード
  2. %作者 堀江伸一 記述時間約 1時間
  3.  
  4. num_pattern(0,[[1,0],[0,1],[2,1],[0,3],[2,3],[1,4]]).
  5. num_pattern(0,[[1,0],[3,0],[0,1],[4,1],[1,2],[3,2]]).
  6.  
  7. num_pattern(1,[[0,1],[0,3]]).
  8. num_pattern(1,[[1,0],[3,0]]).
  9.  
  10. num_pattern(2,[[1,0],[2,1],[1,2],[0,3],[1,4]]).
  11. num_pattern(2,[[1,0],[0,1],[2,1],[4,1],[3,2]]).
  12. num_pattern(2,[[1,0],[0,1],[1,2],[2,3],[1,4]]).
  13. num_pattern(2,[[3,0],[0,1],[2,1],[4,1],[1,2]]).
  14.  
  15. num_pattern(3,[[1,0],[2,1],[1,2],[2,3],[1,4]]).
  16. num_pattern(3,[[0,1],[1,2],[2,1],[3,2],[4,1]]).
  17. num_pattern(3,[[1,0],[0,1],[1,2],[0,3],[1,4]]).
  18. num_pattern(3,[[1,0],[3,0],[0,1],[2,1],[4,1]]).
  19.  
  20.  
  21. num_pattern(4,[[0,1],[2,1],[1,2],[2,3]]).
  22. num_pattern(4,[[1,0],[0,1],[-1,2],[1,2]]).
  23. num_pattern(4,[[0,1],[1,2],[0,3],[2,3]]).
  24. num_pattern(4,[[1,0],[3,0],[2,1],[1,2]]).
  25.  
  26. num_pattern(4,[[0,1],[2,1],[1,2],[0,3]]).
  27. num_pattern(4,[[1,0],[2,1],[1,2],[3,2]]).
  28. num_pattern(4,[[0,1],[-1,2],[-2,3],[0,3]]).
  29. num_pattern(4,[[1,0],[3,0],[2,1],[3,2]]).
  30.  
  31.  
  32. num_pattern(5,Pattern):-num_pattern(2,Pattern).
  33.  
  34.  
  35. num_pattern(6,[[1,0],[0,1],[1,2],[0,3],[2,3],[1,4]]).
  36. num_pattern(6,[[1,0],[3,0],[0,1],[2,1],[4,1],[1,2]]).
  37. num_pattern(6,[[1,0],[0,1],[2,1],[1,2],[2,3],[1,4]]).
  38. num_pattern(6,[[3,0],[0,1],[2,1],[4,1],[1,2],[3,2]]).
  39.  
  40. num_pattern(6,[[1,0],[2,1],[1,2],[0,3],[2,3],[1,4]]).
  41. num_pattern(6,[[1,0],[0,1],[2,1],[4,1],[1,2],[3,2]]).
  42. num_pattern(6,[[1,0],[0,1],[2,1],[1,2],[0,3],[1,4]]).
  43. num_pattern(6,[[1,0],[3,0],[0,1],[2,1],[4,1],[3,2]]).
  44.  
  45. num_pattern(7,[[1,0],[2,1],[2,3]]).
  46. num_pattern(7,[[0,1],[-1,2],[-3,2]]).
  47. num_pattern(7,[[0,1],[0,3],[1,4]]).
  48. num_pattern(7,[[1,0],[3,0],[0,1]]).
  49.  
  50. num_pattern(7,[[1,0],[0,1],[0,3]]).
  51. num_pattern(7,[[1,0],[3,0],[4,1]]).
  52. num_pattern(7,[[0,1],[0,3],[-1,4]]).
  53. num_pattern(7,[[0,1],[1,2],[3,2]]).
  54.  
  55. num_pattern(8,[[1,0],[0,1],[2,1],[1,2],[0,3],[2,3],[1,4]]).
  56. num_pattern(8,[[1,0],[3,0],[0,1],[2,1],[4,1],[1,2],[3,2]]).
  57.  
  58. num_pattern(9,Pattern):-num_pattern(6,Pattern).
  59.  
  60. update(_,_,_,[],NowState,NowState):-!.
  61. update(Row,Col,No,[[X,Y]|Rest],NowState,[[X1,Y1,No]|Result]):-
  62. X1 is Col+X,
  63. Y1 is Row+Y,
  64. XMax is 9+(Y1 mod 2),
  65. YMax is 7+(X1 mod 2),
  66. 0=<X1,
  67. 0=<Y1,
  68. X1=<XMax,
  69. Y1=<YMax,
  70. not(member([X1,Y1,_],NowState)),
  71. update(Row,Col,No,Rest,NowState,Result).
  72.  
  73. print_b([]).
  74. print_b([[_,_,N0],[_,_,N1],[_,_,N2],[_,_,N3],[_,_,N4]|Rest]):-
  75. write([N0,s,N1,s,N2,s,N3,s,N4]),nl,
  76. print_a(Rest).
  77.  
  78. print_a([[_,_,N0],[_,_,N1],[_,_,N2],[_,_,N3]|Rest]):-
  79. write([s,N0,s,N1,s,N2,s,N3]),nl,
  80. print_b(Rest).
  81.  
  82.  
  83. search(_,_,[],Ans):-
  84. !,sort(Ans,Ans1),
  85. print_a(Ans1).
  86.  
  87. search(Row,Col,Nums,Ans):-
  88. Row=:=8,
  89. Col1 is Col+1,
  90. member([Col1,Row,_],Ans),
  91. !,
  92. Col2 is Col+2,
  93. search(Row,Col2,Nums,Ans).
  94.  
  95. search(Row,Col,Nums,Ans):-
  96. Col=:=10,
  97. Row1 is Row+1,
  98. member([Col,Row1,_],Ans),
  99. !,
  100. Col2 is 0,
  101. Row2 is Row+2,
  102. search(Row2,Col2,Nums,Ans).
  103.  
  104. search(Row,Col,Nums,Ans):-
  105. Row1 is Row+1,
  106. Col1 is Col+1,
  107. member([Col1,Row,_],Ans),
  108. member([Col,Row1,_],Ans),
  109. !,
  110. Col2 is Col+2,
  111. search(Row,Col2,Nums,Ans).
  112. search(Row,Col,Nums,Ans):-
  113. select(Num,Nums,RestNums),
  114. num_pattern(Num,NumP),
  115. update(Row,Col,Num,NumP,Ans,NextAns),
  116. search(Row,Col,RestNums,NextAns).
  117.  
  118. main:-search(0,0,[0,1,2,3,4,5,6,7,8,9],[]).
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty