Advertisement
Schleimpilz

Sudoku Fertig

May 30th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.93 KB | None | 0 0
  1. line1=[[0],[4],[5],[7],[0],[0],[0],[6],[1]]
  2. line2=[[0],[0],[0],[8],[0],[5],[4],[0],[0]]
  3. line3=[[0],[0],[7],[6],[4],[0],[0],[0],[2]]
  4. line4=[[5],[0],[0],[9],[6],[4],[0],[0],[0]]
  5. line5=[[6],[0],[8],[5],[0],[1],[0],[3],[0]]
  6. line6=[[0],[7],[0],[0],[0],[0],[0],[9],[0]]
  7. line7=[[3],[0],[2],[4],[0],[0],[1],[0],[0]]
  8. line8=[[9],[0],[0],[1],[0],[0],[0],[0],[6]]
  9. line9=[[0],[0],[0],[0],[0],[3],[8],[0],[0]]
  10.  
  11. sudoku=[line1,line2,line3,line4,line5,line6,line7,line8,line9]
  12.  
  13.  
  14. def checkSquare(square):
  15.     if len(square)==1 and square!=[0]:
  16.         done=True
  17.        
  18.     else:
  19.         done=False
  20.        
  21.     return(done)
  22.  
  23.  
  24.    
  25. def listSubtract(subtract,list1):
  26.     result=list1
  27.     for a in range (len(subtract)):
  28.         if subtract[a] in list1:
  29.             result.remove(subtract[a])
  30.    
  31.     return (result)
  32.  
  33.  
  34. #"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).
  35. #notAdd ist die liste die die in dieser Reihe unmöglichen Zahlen enthält
  36. #possible ist die Liste die alle möglichen zahlen eines feldes speichert
  37. def checkRow(row):
  38.     notAdd=[]
  39.     for a in range(9):
  40.         if checkSquare(row[a]):
  41.             notAdd=notAdd+(row[a])
  42. #            print(notAdd)
  43.     for b in range(9):
  44.         if len(row[b])!=1 or row[b]==[0]:
  45.             if row[b]==[0]:
  46.                possible=[1,2,3,4,5,6,7,8,9]
  47.             else:
  48.                 possible=row[b]
  49. #            print(possible)
  50.             possible=listSubtract(notAdd,possible)
  51.             row[b]=possible
  52. #        print(row[b])
  53.     return()
  54.  
  55.  
  56. def checkForComplete(sudoku):
  57.     completeness=0
  58.     for x in range(len(sudoku)):
  59.         for y in range(len(sudoku[x])):
  60.             if checkSquare(sudoku[x][y]):
  61.                 completeness=completeness+1
  62.     return(completeness)
  63.  
  64.  
  65. def printSudoku(sudoku):
  66.     n="\n"
  67.     s="|"
  68.     line="|---|---|---||---|---|---||---|---|---|"
  69.     smoothLine="---------------------------------------"
  70.     output=smoothLine+n
  71.     for i in range(len(sudoku)):
  72.         for j in range(len(sudoku[i])):
  73.             if j%3==0:
  74.                 output=output+s
  75.             output=output+" "+str(sudoku[i][j][0])+" "+s
  76.         if (i+1)%3==0:
  77.             output=output+n+smoothLine+n
  78.         else:
  79.             output=output+n+line+n
  80.     print(output)
  81.     return()
  82.  
  83.  
  84.  
  85. while checkForComplete(sudoku)<81:
  86.  
  87. #checkt zeilen
  88.     for g in range(9):
  89.         checkRow(sudoku[g])
  90.  
  91. #checkt spalten        
  92.     for f in range(9):
  93.         spalte=[]
  94.         for e in range(9):
  95.             spalte.append(sudoku[e][f])
  96.         checkRow(spalte)
  97.  
  98. #checkt blöcke        
  99.     for o in range(3):
  100.         for p in range(3):
  101. #o und p sind koordinaten des aktuellen blocks
  102.             block=[]
  103.             for c in range(3):
  104.                 for d in range(3):
  105.                     block.append(sudoku[3*o+c][3*p+d])
  106.             checkRow(block)
  107.  
  108. printSudoku(sudoku)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement