Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.78 KB | None | 0 0
  1. def sudoku_solver(sudoku):
  2.    
  3.     variables=np.array([])
  4.     complete=False;
  5.     returned=False;
  6.     for i in range(81):
  7.         if sudoku[i//9,i%9] == 0.0:
  8.             variables = np.append(variables,i)
  9.     x = 0;
  10.    
  11.     while complete == False:
  12.         if len(variables)==0:
  13.             complete=True
  14.             break;
  15.         if sudoku[int(variables[x]//9),int(variables[x]%9)] == 9:
  16.             sudoku[int(variables[x]//9),int(variables[x]%9)] = 0;
  17.             x=x-1;
  18.            
  19.         if sudoku[int(variables[x]//9),int(variables[x]%9)] != 9:
  20.             sudoku[int(variables[x]//9),int(variables[x]%9)] = sudoku[int(variables[x]//9),int(variables[x]%9)]+1
  21.             if isSquareLegal(sudoku,int(variables[x]//9)+1,int(variables[x]%9)+1) == True:
  22.                 x=x+1
  23.        
  24.         if isSquareLegal(sudoku,int(variables[len(variables)-1])//9+1,int(variables[len(variables)-1])%9+1) == True:
  25.             complete = True    
  26.    
  27.     if len(variables)>0:
  28.         if sudoku[int(variables[0]//9),int(variables[0]%9)]==0:
  29.             for i in range(9):
  30.                 for j in range(9):
  31.                     sudoku[i,j] = -1;
  32.      
  33.        
  34.                
  35.    
  36.     solved_sudoku = sudoku
  37.     return solved_sudoku
  38.  
  39. def getRow(a,i,j):
  40.     return a[i-1,:]
  41.  
  42. def getColumn(a,i,j):
  43.     return a[:,j-1]
  44.  
  45. def getSquare(a,i,j):
  46.     if i<4 and j<4:
  47.         return np.concatenate((a[0,0:3],a[1,0:3],a[2,0:3]))
  48.     elif  i<4 and 3<j<7:
  49.         return np.concatenate((a[0,3:6],a[1,3:6],a[2,3:6]))
  50.     elif  i<4 and 6<j<10:
  51.         return np.concatenate((a[0,6:9],a[1,6:9],a[2,6:9]))
  52.     elif  3<i<7 and j<4:
  53.         return np.concatenate((a[3,0:3],a[4,0:3],a[5,0:3]))
  54.     elif  3<i<7 and 3<j<7:
  55.         return np.concatenate((a[3,3:6],a[4,3:6],a[5,3:6]))
  56.     elif  3<i<7 and 6<j<10:
  57.         return np.concatenate((a[3,6:9],a[4,6:9],a[5,6:9]))
  58.     elif  6<i<10 and j<4:
  59.         return np.concatenate((a[6,0:3],a[7,0:3],a[8,0:3]))
  60.     elif  6<i<10 and 3<j<7:
  61.         return np.concatenate((a[6,3:6],a[7,3:6],a[8,3:6]))
  62.     elif  6<i<10 and 6<j<10:
  63.         return np.concatenate((a[6,6:9],a[7,6:9],a[8,6:9]))
  64.    
  65.    
  66. def isSquareLegal(a,i,j):
  67.     if (allDiff(getRow(a,i,j)) and allDiff(getColumn(a,i,j)) and allDiff(getSquare(a,i,j))) and a[i-1,j-1]!=0:
  68.         return True
  69.     else:
  70.         return False
  71.    
  72. def allDiff(a):
  73.     temp = np.flip(np.sort(a),0);
  74.     for i in range(len(a)):
  75.         if i == len(a)-1:
  76.             return True
  77.         elif temp[i+1] == 0:
  78.             return True
  79.         elif temp[i] == temp[i+1]:
  80.             return False
  81.        
  82.    
  83.  
  84. sudoku = sudokus[1].copy()
  85. print("This is sudoku number", 1)
  86. print(sudoku)
  87. your_solution = sudoku_solver(sudokus[1])
  88. print("This is your solution for sudoku number", 1)
  89. print(your_solution)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement