solver.go 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. package solver
  2. import (
  3. "fmt"
  4. "strconv"
  5. )
  6. func Run() {
  7. solver := Solver{}
  8. solver.load_blocks()
  9. for index1 := range solver.blocks {
  10. for index2 := range solver.blocks {
  11. if solver.compare2(index1, index2) {
  12. for index3 := range solver.blocks {
  13. if solver.compare3(index1, index2, index3) {
  14. for index4 := range solver.blocks {
  15. if solver.compare4(index1, index2, index3, index4) {
  16. for index5 := range solver.blocks {
  17. if solver.compare5(index1, index2, index3, index4, index5) {
  18. for index6 := range solver.blocks {
  19. if solver.compare6(index1, index2, index3, index4, index5, index6) {
  20. for index7 := range solver.blocks {
  21. if solver.compare7(index1, index2, index3, index4, index5, index6, index7) {
  22. for index8 := range solver.blocks {
  23. if solver.compare8(index1, index2, index3, index4, index5, index6, index7, index8) {
  24. for index9 := range solver.blocks {
  25. go solver.routine_compare9(index1, index2, index3, index4, index5, index6, index7, index8, index9)
  26. // if solver.compare9(index1, index2, index3, index4, index5, index6, index7, index8, index9) {
  27. // fmt.Printf("%d:%d:%d:%d:%d:%d:%d:%d:%d\n", solver.blocks[index1], solver.blocks[index2], solver.blocks[index3], solver.blocks[index4], solver.blocks[index5], solver.blocks[index6], solver.blocks[index7], solver.blocks[index8], solver.blocks[index9])
  28. }
  29. }
  30. }
  31. }
  32. }
  33. }
  34. }
  35. }
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42. }
  43. }
  44. }
  45. func (solver *Solver) compare2(index1 int, index2 int) bool {
  46. var retval bool
  47. retval = true
  48. row1 := strconv.Itoa(solver.blocks[index1])
  49. row2 := strconv.Itoa(solver.blocks[index2])
  50. for index := range 9 {
  51. if row1[index] == row2[index] {
  52. retval = false
  53. }
  54. }
  55. return retval
  56. }
  57. func (solver *Solver) compare3(index1 int, index2 int, index3 int) bool {
  58. var retval bool
  59. retval = true
  60. row1 := strconv.Itoa(solver.blocks[index1])
  61. row2 := strconv.Itoa(solver.blocks[index2])
  62. row3 := strconv.Itoa(solver.blocks[index3])
  63. for index := range 9 {
  64. if row1[index] == row2[index] || row1[index] == row3[index] {
  65. retval = false
  66. }
  67. if row2[index] == row3[index] {
  68. retval = false
  69. }
  70. }
  71. return retval
  72. }
  73. func (solver *Solver) compare4(index1 int, index2 int, index3 int, index4 int) bool {
  74. var retval bool
  75. retval = true
  76. row1 := strconv.Itoa(solver.blocks[index1])
  77. row2 := strconv.Itoa(solver.blocks[index2])
  78. row3 := strconv.Itoa(solver.blocks[index3])
  79. row4 := strconv.Itoa(solver.blocks[index4])
  80. for index := range 9 {
  81. if row1[index] == row2[index] || row1[index] == row3[index] || row1[index] == row4[index] {
  82. retval = false
  83. }
  84. if row2[index] == row3[index] || row2[index] == row4[index] {
  85. retval = false
  86. }
  87. if row3[index] == row4[index] {
  88. retval = false
  89. }
  90. }
  91. return retval
  92. }
  93. func (solver *Solver) compare5(index1 int, index2 int, index3 int, index4 int, index5 int) bool {
  94. var retval bool
  95. retval = true
  96. row1 := strconv.Itoa(solver.blocks[index1])
  97. row2 := strconv.Itoa(solver.blocks[index2])
  98. row3 := strconv.Itoa(solver.blocks[index3])
  99. row4 := strconv.Itoa(solver.blocks[index4])
  100. row5 := strconv.Itoa(solver.blocks[index5])
  101. for index := range 9 {
  102. if row1[index] == row2[index] || row1[index] == row3[index] || row1[index] == row4[index] || row1[index] == row5[index] {
  103. retval = false
  104. }
  105. if row2[index] == row3[index] || row2[index] == row4[index] || row2[index] == row5[index] {
  106. retval = false
  107. }
  108. if row3[index] == row4[index] || row3[index] == row5[index] {
  109. retval = false
  110. }
  111. if row4[index] == row5[index] {
  112. retval = false
  113. }
  114. }
  115. return retval
  116. }
  117. func (solver *Solver) compare6(index1 int, index2 int, index3 int, index4 int, index5 int, index6 int) bool {
  118. var retval bool
  119. retval = true
  120. row1 := strconv.Itoa(solver.blocks[index1])
  121. row2 := strconv.Itoa(solver.blocks[index2])
  122. row3 := strconv.Itoa(solver.blocks[index3])
  123. row4 := strconv.Itoa(solver.blocks[index4])
  124. row5 := strconv.Itoa(solver.blocks[index5])
  125. row6 := strconv.Itoa(solver.blocks[index6])
  126. for index := range 9 {
  127. if row1[index] == row2[index] || row1[index] == row3[index] || row1[index] == row4[index] || row1[index] == row5[index] || row1[index] == row6[index] {
  128. retval = false
  129. }
  130. if row2[index] == row3[index] || row2[index] == row4[index] || row2[index] == row5[index] || row2[index] == row6[index] {
  131. retval = false
  132. }
  133. if row3[index] == row4[index] || row3[index] == row5[index] || row3[index] == row6[index] {
  134. retval = false
  135. }
  136. if row4[index] == row5[index] || row4[index] == row6[index] {
  137. retval = false
  138. }
  139. if row5[index] == row6[index] {
  140. retval = false
  141. }
  142. }
  143. return retval
  144. }
  145. func (solver *Solver) compare7(index1 int, index2 int, index3 int, index4 int, index5 int, index6 int, index7 int) bool {
  146. var retval bool
  147. retval = true
  148. row1 := strconv.Itoa(solver.blocks[index1])
  149. row2 := strconv.Itoa(solver.blocks[index2])
  150. row3 := strconv.Itoa(solver.blocks[index3])
  151. row4 := strconv.Itoa(solver.blocks[index4])
  152. row5 := strconv.Itoa(solver.blocks[index5])
  153. row6 := strconv.Itoa(solver.blocks[index6])
  154. row7 := strconv.Itoa(solver.blocks[index7])
  155. for index := range 9 {
  156. if row1[index] == row2[index] || row1[index] == row3[index] || row1[index] == row4[index] || row1[index] == row5[index] || row1[index] == row6[index] || row1[index] == row7[index] {
  157. retval = false
  158. }
  159. if row2[index] == row3[index] || row2[index] == row4[index] || row2[index] == row5[index] || row2[index] == row6[index] || row2[index] == row7[index] {
  160. retval = false
  161. }
  162. if row3[index] == row4[index] || row3[index] == row5[index] || row3[index] == row6[index] || row3[index] == row7[index] {
  163. retval = false
  164. }
  165. if row4[index] == row5[index] || row4[index] == row6[index] || row4[index] == row7[index] {
  166. retval = false
  167. }
  168. if row5[index] == row6[index] || row5[index] == row7[index] {
  169. retval = false
  170. }
  171. if row6[index] == row7[index] {
  172. retval = false
  173. }
  174. }
  175. return retval
  176. }
  177. func (solver *Solver) compare8(index1 int, index2 int, index3 int, index4 int, index5 int, index6 int, index7 int, index8 int) bool {
  178. var retval bool
  179. retval = true
  180. row1 := strconv.Itoa(solver.blocks[index1])
  181. row2 := strconv.Itoa(solver.blocks[index2])
  182. row3 := strconv.Itoa(solver.blocks[index3])
  183. row4 := strconv.Itoa(solver.blocks[index4])
  184. row5 := strconv.Itoa(solver.blocks[index5])
  185. row6 := strconv.Itoa(solver.blocks[index6])
  186. row7 := strconv.Itoa(solver.blocks[index7])
  187. row8 := strconv.Itoa(solver.blocks[index8])
  188. for index := range 9 {
  189. if row1[index] == row2[index] || row1[index] == row3[index] || row1[index] == row4[index] || row1[index] == row5[index] || row1[index] == row6[index] || row1[index] == row7[index] || row1[index] == row8[index] {
  190. retval = false
  191. }
  192. if row2[index] == row3[index] || row2[index] == row4[index] || row2[index] == row5[index] || row2[index] == row6[index] || row2[index] == row7[index] || row2[index] == row8[index] {
  193. retval = false
  194. }
  195. if row3[index] == row4[index] || row3[index] == row5[index] || row3[index] == row6[index] || row3[index] == row7[index] || row3[index] == row8[index] {
  196. retval = false
  197. }
  198. if row4[index] == row5[index] || row4[index] == row6[index] || row4[index] == row7[index] || row4[index] == row8[index] {
  199. retval = false
  200. }
  201. if row5[index] == row6[index] || row5[index] == row7[index] || row5[index] == row8[index] {
  202. retval = false
  203. }
  204. if row6[index] == row7[index] || row6[index] == row8[index] {
  205. retval = false
  206. }
  207. if row7[index] == row8[index] {
  208. retval = false
  209. }
  210. }
  211. return retval
  212. }
  213. func (solver *Solver) routine_compare9(index1 int, index2 int, index3 int, index4 int, index5 int, index6 int, index7 int, index8 int, index9 int) {
  214. if solver.compare9(index1, index2, index3, index4, index5, index6, index7, index8, index9) {
  215. fmt.Printf("%d:%d:%d:%d:%d:%d:%d:%d:%d\n", solver.blocks[index1], solver.blocks[index2], solver.blocks[index3], solver.blocks[index4], solver.blocks[index5], solver.blocks[index6], solver.blocks[index7], solver.blocks[index8], solver.blocks[index9])
  216. }
  217. }
  218. func (solver *Solver) compare9(index1 int, index2 int, index3 int, index4 int, index5 int, index6 int, index7 int, index8 int, index9 int) bool {
  219. var retval bool
  220. retval = true
  221. row1 := strconv.Itoa(solver.blocks[index1])
  222. row2 := strconv.Itoa(solver.blocks[index2])
  223. row3 := strconv.Itoa(solver.blocks[index3])
  224. row4 := strconv.Itoa(solver.blocks[index4])
  225. row5 := strconv.Itoa(solver.blocks[index5])
  226. row6 := strconv.Itoa(solver.blocks[index6])
  227. row7 := strconv.Itoa(solver.blocks[index7])
  228. row8 := strconv.Itoa(solver.blocks[index8])
  229. row9 := strconv.Itoa(solver.blocks[index9])
  230. for index := range 9 {
  231. if row1[index] == row2[index] || row1[index] == row3[index] || row1[index] == row4[index] || row1[index] == row5[index] || row1[index] == row6[index] || row1[index] == row7[index] || row1[index] == row8[index] || row1[index] == row9[index] {
  232. retval = false
  233. }
  234. if row2[index] == row3[index] || row2[index] == row4[index] || row2[index] == row5[index] || row2[index] == row6[index] || row2[index] == row7[index] || row2[index] == row8[index] || row2[index] == row9[index] {
  235. retval = false
  236. }
  237. if row3[index] == row4[index] || row3[index] == row5[index] || row3[index] == row6[index] || row3[index] == row7[index] || row3[index] == row8[index] || row3[index] == row9[index] {
  238. retval = false
  239. }
  240. if row4[index] == row5[index] || row4[index] == row6[index] || row4[index] == row7[index] || row4[index] == row8[index] || row4[index] == row9[index] {
  241. retval = false
  242. }
  243. if row5[index] == row6[index] || row5[index] == row7[index] || row5[index] == row8[index] || row5[index] == row9[index] {
  244. retval = false
  245. }
  246. if row6[index] == row7[index] || row6[index] == row8[index] || row7[index] == row9[index] {
  247. retval = false
  248. }
  249. if row7[index] == row8[index] || row7[index] == row9[index] {
  250. retval = false
  251. }
  252. if row8[index] == row9[index] {
  253. retval = false
  254. }
  255. }
  256. return retval
  257. }