Crie uma solução Sudoku CHECKER
Existem muitos SOLVERS do Sudoku aqui, mas quero que você crie uma solução CHECKER tão pequena quanto humanamente possível (código-golfe).
Uma entrada válida poderá aceitar uma matriz 9x9 como argumento (passado por referência, serializado na linha de comando ou como você desejar) ou aceitar um arquivo de entrada com nove linhas de nove números para a grade final . Veja exemplos de entrada abaixo.
A entrada válida deve ter números de base 10 (1-9)
As posições ausentes, vazias, extras, não numéricas ou com números fora de 1 a 9 devem ser rejeitadas como entrada inválida retornando um resultado diferente de zero, imprimindo um erro ou ambos.
Seu programa precisa testar se cada número aparece uma vez por coluna, uma vez por linha e uma vez por sub-grade 3x3. Se for aprovado, retorne "0" e, se não, retorne um resultado diferente de zero.
O uso de recursos externos (sites, etc.) deve ser evitado.
Se a sua solução for um programa independente, sair com um status de saída de ou imprimir "0" ou diferente de zero para "Aprovado" ou "Reprovado", respectivamente, está ok.
Deixe a menor resposta vencer!
Exemplos 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}
};
Arquivo:
123456789
456789123
789123456
231564897
564897231
897231564
312645978
645978312
978312645
As 9 subgrelhas:
+---+---+---+
|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
ou-1