Las soluciones distintas del sudoku 3×3

Este es el programa que habiamos hecho, en donde daban soluciones aleatorias


import numpy as np
from random import *
def random3():
 aux1 = 3*random()
 if aux1 > 0 and aux1<=1: aux2=1
 if aux1 > 1 and aux1<=2: aux2=2
 if aux1 > 2 and aux1<=3: aux2=3
 return aux2

def busca2(A):
 solucion = 1 # Es una bandera, solucion 1 se asume temporalmente que es solucion, 0 Se demuestra que NO es solucion
 if solucion ==1:  # Checando el primer renglon...
  if A[0,0] == A[0,1] or A[0,0] == A[0,2] or A[0,1]==A[0,2]:
   solucion = 0
 if solucion ==1:  # Checando el segundo renglon...
  if A[1,0] == A[1,1] or A[1,0] == A[1,2] or A[1,1]==A[1,2]:
   solucion = 0
 if solucion ==1:  # Checando el segundo renglon...
  if A[2,0] == A[2,1] or A[2,0] == A[2,2] or A[2,1]==A[2,2]:
   solucion = 0
 if solucion ==1:  # Checando la primer columna...
  if A[0,0] == A[1,0] or A[0,0] == A[2,0] or A[1,0]==A[2,0]:
   solucion = 0
 if solucion ==1:  # Checando la segunda columna...
  if A[0,1] == A[1,1] or A[0,1] == A[2,1] or A[1,1]==A[2,1]:
   solucion = 0
 if solucion ==1:  # Checando la tercer columna...
  if A[0,2] == A[1,2] or A[0,2] == A[2,2] or A[1,2]==A[2,2]:
   solucion = 0
 return solucion
#############################################
cuenta=0
N=500
A=np.zeros((3,3))

for k in range(N):
    
 for i in range(3):
  for j in range(3):
   A[i,j]=random3() 

   if busca2(A)==1:
    print()
    print(A)
    cuenta=cuenta+1

print(cuenta)

En el siguiente programa, aprendemos a convertir las soluciones en novenas y echarlas a una bolsa

cuenta=0
N=500
A=np.zeros((3,3))

novena = []
bolsa  = []
unicas = []

for k in range(N):
    
 for i in range(3):
  for j in range(3):
   A[i,j]=random3() 

   if busca2(A)==1:
    print()
    print(A)
    novena = [A[0,0],A[0,1],A[0,2],A[1,0],A[1,1],A[1,2],A[2,0],A[2,1],A[2,2]]
    print(novena)
    bolsa.append(novena)
    print(bolsa)
    cuenta=cuenta+1

print(cuenta)

Finalmente, el siguiente programa nos permite encontrar las soluciones distintas

cuenta=0
N=1000
A=np.zeros((3,3))

novena = []
bolsa  = []
unicas = []

for k in range(N):
    
 for i in range(3):
  for j in range(3):
   A[i,j]=random3() 

   if busca2(A)==1:
    print()
    print(A)
    novena = (A[0,0],A[0,1],A[0,2],A[1,0],A[1,1],A[1,2],A[2,0],A[2,1],A[2,2])
    print(novena)
    bolsa.append(novena)
    print(bolsa)
    cuenta=cuenta+1


unicas=set(bolsa)
print(bolsa)
print(unicas)
print('Encontre =',cuenta,' pero nomas hay diferentes ',len(unicas))