Problema
Considere uma grade quadrada de 3 por 3 de números inteiros não negativos. Para cada linha, i
a soma dos números inteiros é configurada para ser r_i
. Da mesma forma, para cada coluna, j
a soma dos números inteiros nessa coluna está configurada para ser c_j
.
A tarefa é escrever código para enumerar todas as possíveis atribuições diferentes de números inteiros para a grade, dadas as restrições de soma de linhas e colunas. Seu código deve gerar uma atribuição por vez.
Entrada
Seu código deve usar 3 números inteiros não negativos, especificando as restrições de linha e 3 números inteiros não negativos, especificando as restrições de coluna. Você pode assumir que eles são válidos, ou seja, que as restrições de soma ou linha são iguais à soma das restrições de coluna. Seu código pode fazer isso da maneira que for mais conveniente.
Resultado
Seu código deve gerar as diferentes grades 2D que ele calcula em qualquer formato legível por humanos de sua escolha. Quanto mais bonito, melhor, é claro. A saída não deve conter grades duplicadas.
Exemplo
Se todas as restrições de linha e coluna forem exatamente, 1
então existem apenas 6
possibilidades diferentes. Para a primeira linha, você pode colocar um 1
em qualquer uma das três primeiras colunas, para a segunda linha agora existem 2
alternativas e a última linha agora é completamente determinada pelas duas anteriores. Tudo o resto na grade deve ser definido como 0
.
Digamos que a entrada seja 2 1 0
para as linhas e 1 1 1
para as colunas. Usando o adorável formato de saída da APL, as possíveis grades inteiras são:
┌─────┬─────┬─────┐
│0 1 1│1 0 1│1 1 0│
│1 0 0│0 1 0│0 0 1│
│0 0 0│0 0 0│0 0 0│
└─────┴─────┴─────┘
Agora diga que a entrada é 1 2 3
para as linhas e 3 2 1
para as colunas. As possíveis grades inteiras são:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│0 0 1│0 0 1│0 0 1│0 1 0│0 1 0│0 1 0│0 1 0│1 0 0│1 0 0│1 0 0│1 0 0│1 0 0│
│0 2 0│1 1 0│2 0 0│0 1 1│1 0 1│1 1 0│2 0 0│0 1 1│0 2 0│1 0 1│1 1 0│2 0 0│
│3 0 0│2 1 0│1 2 0│3 0 0│2 1 0│2 0 1│1 1 1│2 1 0│2 0 1│1 2 0│1 1 1│0 2 1│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘