Crear una solución de Sudoku CHEQUEADOR
Aquí hay montones de SOLDADORES de Sudoku, pero quiero que crees una solución CHECKER tan pequeña como sea humanamente posible (code-golf).
Una entrada válida podrá tomar una matriz de 9x9 como argumento (pasado por referencia, serializado en la línea de comando, o como quiera tomarlo) o aceptar un archivo de entrada que tenga nueve líneas de nueve números para la grilla final . Ver ejemplos de entrada a continuación.
La entrada válida debe ser números de base 10 (1-9)
Las posiciones faltantes, vacías, extra, no numéricas, o las posiciones con números fuera del 1-9 deben rechazarse como una entrada no válida al devolver un resultado distinto de cero, imprimir un error o ambos.
Su programa necesita probar si cada número aparece una vez por columna, una vez por línea y una vez por cada subcuadrícula 3x3. Si pasa, devuelve "0" y si no, devuelve un resultado distinto de cero.
Se debe evitar el uso de recursos externos (sitios web, etc.).
Si su solución es un programa independiente, salir con un estado de salida o imprimir "0" o distinto de cero para "Pasar" o "Fallar", respectivamente, está bien.
¡Que gane la respuesta más pequeña!
Ejemplos de entrada:
matriz c:
int input[9][9]={{1,2,3,4,5,6,7,8,9},
{4,5,6,7,8,9,1,2,3},
{7,8,9,1,2,3,4,5,6},
{2,3,1,5,6,4,8,9,7},
{5,6,4,8,9,7,2,3,1},
{8,9,7,2,3,1,5,6,4},
{3,1,2,6,4,5,9,7,8},
{6,4,5,9,7,8,3,1,2},
{9,7,8,3,1,2,6,4,5}
};
archivo:
123456789
456789123
789123456
231564897
564897231
897231564
312645978
645978312
978312645
Las 9 subrejillas:
+---+---+---+
|123|456|789|
|456|789|123|
|789|123|456|
+---+---+---+
|231|564|897|
|564|897|231|
|897|231|564|
+---+---+---+
|312|645|978|
|645|978|312|
|978|312|645|
+---+---+---+
1
o-1