Problema
Considere una cuadrícula de 3 por 3 de enteros no negativos. Para cada fila, i
la suma de los enteros se establece en r_i
. Del mismo modo, para cada columna, j
la suma de los enteros en esa columna se establece en c_j
.
La tarea es escribir código para enumerar todas las posibles asignaciones diferentes de enteros a la cuadrícula dadas las restricciones de suma de filas y columnas. Su código debe generar una asignación a la vez.
Entrada
Su código debe tomar 3 enteros no negativos que especifiquen las restricciones de fila y 3 enteros no negativos que especifiquen las restricciones de columna. Puede suponer que estos son válidos, es decir, que las restricciones de suma o fila son iguales a la suma de las restricciones de columna. Su código puede hacer esto de cualquier manera que sea conveniente.
Salida
Su código debe generar las diferentes cuadrículas 2d que calcula en cualquier formato legible por humanos que elija. Cuanto más bonita, mejor, por supuesto. La salida no debe contener cuadrículas duplicadas.
Ejemplo
Si todas las restricciones de fila y columna son exactamente, 1
entonces solo hay 6
diferentes posibilidades. Para la primera fila, puede poner una 1
en cualquiera de las primeras tres columnas, para la segunda fila ahora hay 2
alternativas y la última fila ahora está completamente determinada por las dos anteriores. Todo lo demás en la cuadrícula debe establecerse en 0
.
Digamos que la entrada es 2 1 0
para las filas y 1 1 1
para las columnas. Usando el formato de salida encantador de APL, las posibles cuadrículas de enteros son:
┌─────┬─────┬─────┐
│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│
└─────┴─────┴─────┘
Ahora digamos que la entrada es 1 2 3
para las filas y 3 2 1
para las columnas. Las posibles cuadrículas de enteros son:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│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│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘