Advertisement
Schleimpilz

Sudoku 2.1

Jun 10th, 2019
383
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.83 KB | None | 0 0
  1. import time as t
  2.  
  3. #zum reset hier ne leere zeile für copy+paste:[[],[],[],[],[],[],[],[],[]]
  4.  
  5.  
  6. line1=[[1],[0],[0],[5],[7],[0],[3],[0],[0]]
  7. line2=[[0],[0],[0],[0],[0],[0],[5],[7],[0]]
  8. line3=[[6],[0],[0],[0],[9],[0],[0],[0],[8]]
  9. line4=[[0],[0],[0],[0],[0],[0],[0],[4],[1]]
  10. line5=[[0],[0],[0],[6],[0],[3],[0],[0],[0]]
  11. line6=[[7],[2],[8],[0],[0],[0],[0],[0],[0]]
  12. line7=[[0],[9],[0],[2],[0],[6],[0],[0],[0]]
  13. line8=[[0],[0],[0],[0],[0],[1],[2],[0],[3]]
  14. line9=[[3],[5],[2],[0],[0],[0],[9],[0],[0]]
  15.  
  16. sudoku=[line1,line2,line3,line4,line5,line6,line7,line8,line9]
  17.  
  18.  
  19.  
  20.  
  21. def printSudoku(sudoku):
  22. n="\n"
  23. s="|"
  24. line="|---|---|---||---|---|---||---|---|---|"
  25. smoothLine="---------------------------------------"
  26. output=smoothLine+n
  27. for i in range(len(sudoku)):
  28. for j in range(len(sudoku[i])):
  29. if j%3==0:
  30. output=output+s
  31. output=output+" "+str(sudoku[i][j][0])+" "+s
  32. # for k in range(len(sudoku[i][j])):
  33. # output=output+str(sudoku[i][j][k])
  34. if (i+1)%3==0:
  35. output=output+n+smoothLine+n
  36. else:
  37. output=output+n+line+n
  38. print(output)
  39. return()
  40.  
  41.  
  42.  
  43.  
  44. def checkSquare(square):
  45. if len(square)==1 and square!=[0]:
  46. done=True
  47.  
  48. else:
  49. done=False
  50.  
  51. return(done)
  52.  
  53.  
  54.  
  55. def listSubtract(subtract,list1):
  56. result=list1
  57. for a in subtract:
  58. if a in list1:
  59. result.remove(a)
  60.  
  61. return (result)
  62.  
  63. def checkForEquals(square1,square2):
  64. overlap=[]
  65. for a in square1:
  66. for b in square2:
  67. if a==b:
  68. overlap.append(a)
  69. # print(overlap)
  70. return(overlap)
  71.  
  72.  
  73.  
  74. def checkGuesses(row):
  75. notAdd=[]
  76. for a in range(9):
  77. if checkSquare(row[a]):
  78. notAdd=notAdd+(row[a])
  79. # print(notAdd)
  80. for b in range(9):
  81. if len(row[b])!=1 or row[b]==[0]:
  82. if row[b]==[0]:
  83. possible=[1,2,3,4,5,6,7,8,9]
  84. else:
  85. possible=row[b]
  86. # print(possible)
  87. possible=listSubtract(notAdd,possible)
  88. row[b]=possible
  89. # print(row[b])
  90. notOverlap=[]
  91. for c in range(9):
  92. if not checkSquare(row[c]):
  93. for d in range(9):
  94. if d!=c:
  95. if not checkSquare(row[d]):
  96. if notOverlap==[]:
  97. notOverlap=listSubtract(row[d],row[c])
  98. else:
  99. notOverlap=listSubtract(row[d],notOverlap)
  100. #notOverlap ist die liste mit zahlen, die nur in einem Feld (row[c]) möglich sind
  101. print(notOverlap)
  102. else:
  103. print("square is done")
  104. if len(notOverlap)==1:
  105. row[c]=notOverlap
  106. return()
  107.  
  108.  
  109.  
  110.  
  111.  
  112. #"row"kann jede liste, die neun Felder umfasst und in der die zahlen von eins bis neun vorkommen sollen sein (also Zeilen, Spalten oder Blöcke).
  113. #notAdd ist die liste die die in dieser Reihe unmöglichen Zahlen enthält
  114. #possible ist die Liste die alle möglichen zahlen eines feldes speichert
  115. def checkRow(row):
  116. notAdd=[]
  117. for a in range(9):
  118. if checkSquare(row[a]):
  119. notAdd=notAdd+(row[a])
  120. # print(notAdd)
  121. for b in range(9):
  122. if len(row[b])!=1 or row[b]==[0]:
  123. if row[b]==[0]:
  124. possible=[1,2,3,4,5,6,7,8,9]
  125. else:
  126. possible=row[b]
  127. # print(possible)
  128. possible=listSubtract(notAdd,possible)
  129. row[b]=possible
  130. # print(row[b])
  131. t.sleep(0.05)
  132. return()
  133.  
  134.  
  135. def checkForComplete(sudoku):
  136. completeness=0
  137. for x in range(len(sudoku)):
  138. for y in range(len(sudoku[x])):
  139. if checkSquare(sudoku[x][y]):
  140. completeness=completeness+1
  141. return(completeness)
  142.  
  143.  
  144. printSudoku(sudoku)
  145.  
  146. counter=0
  147. while checkForComplete(sudoku)<81:
  148.  
  149. #checkt zeilen
  150. for g in range(9):
  151. checkRow(sudoku[g])
  152. #checkRow(sudoku[g])
  153. # print("Zeilen")
  154. # printSudoku(sudoku)
  155. #checkt spalten
  156. for f in range(9):
  157. spalte=[]
  158. for e in range(9):
  159. spalte.append(sudoku[e][f])
  160. checkRow(spalte)
  161. #checkRow(spalte)
  162. # print("spalten")
  163. # printSudoku(sudoku)
  164. #checkt blöcke
  165. for o in range(3):
  166. for p in range(3):
  167. #o und p sind koordinaten des aktuellen blocks
  168. block=[]
  169. for c in range(3):
  170. for d in range(3):
  171. block.append(sudoku[3*o+c][3*p+d])
  172. checkRow(block)
  173. #checkRow(block)
  174. # print("Block")
  175. # printSudoku(sudoku)
  176. t.sleep(1)
  177. counter=counter+1
  178. print(counter)
  179. printSudoku(sudoku)
  180. printSudoku(sudoku)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement