s3Eva_IIT2007_T2 Verificar matriz Sudoku

Ejercicio: 3Eva_IIT2007_T2 Verificar matriz Sudoku

Propuesta de solución en Python:

En el enunciado puede obtener una matriz para usar en el programa ejemplo.

Simplifique el problema, por ejemplo inicie con el algoritmo para verificar los números sea únicos en un vector, el resultado lo convierte una función únicos(vector). La función únicos() la usa para cada fila, luego para cada columna y finalmente para cada recuadro de 3×3.

Al finalizar, convierta la parte del programa ejemplo en una función verificasudoku(matriz).

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IIT2007_T2 Verificar matriz Sudoku
# Propuesta: edelros@espol.edu.ec
# Tarea por completar: tercera regla recuadros

import numpy as np

# verificar unicos en vector, intervalo [1,9]
def unicos(vector):
    m = len(vector)
    contadores = np.zeros(9+1, dtype = int)

    i = 0
    while not(i>=m):
        numero = vector[i]
        contadores[numero] = contadores[numero] +1
        i = i+1

    # revisa que el contador sea siempre 1
    cumple = 1
    numero = 1
    while not(numero>9 or cumple==0):
        if (contadores[numero] != 1):
            cumple = 0
        numero = numero+1
    return(cumple)

# PROGRAMA -------------------------
# INGRESO
matriz=np.array([[1, 3, 5, 4, 6, 2, 9, 8, 7],
                 [7, 6, 2, 1, 9, 8, 5, 4, 3],
                 [8, 9, 4, 5, 3, 7, 6, 2, 1],
                 [9, 7, 8, 6, 1, 3, 2, 5, 4],
                 [4, 1, 6, 9, 2, 5, 3, 7, 8],
                 [2, 5, 3, 7, 8, 4, 1, 6, 9],
                 [5, 2, 7, 3, 4, 1, 8, 9, 6],
                 [3, 8, 9, 2, 7, 6, 4, 1, 5],
                 [6, 4, 1, 8, 5, 9, 7, 3, 2]])

# PROCEDIMIENTO
essudoku = 1

# verifica por filas
fila = 0
while not(fila>=9 or essudoku==0):

    # Selecciona vector
    vector = matriz[fila,:]

    verifica = unicos(vector)
    if (verifica==0):
        essudoku = 0
    fila = fila+1

# Verifica por columnas
columna = 0
while not(columna>=9 or essudoku==0):

    # Selecciona vector
    vector = matriz[:,columna]

    verifica = unicos(vector)
    if (verifica==0):
        essudoku = 0
    columna = columna+1

# Verifica en cada submatriz de 3x3
fila = 0
columna = 0
submatriz = matriz[fila:fila+3,columna:columna+3]
# convertir submatriz a vector
# aplicar funcion unicos, para verificar essudoku

# SALIDA
print('¿es la matriz sudoku? [0,1]: ')
print(essudoku)