Problème
Considérons une grille carrée de 3 x 3 d'entiers non négatifs. Pour chaque ligne, i
la somme des entiers est fixée à r_i
. De même, pour chaque colonne, j
la somme des entiers de cette colonne est définie sur c_j
.
La tâche consiste à écrire du code pour énumérer toutes les différentes affectations possibles d'entiers à la grille compte tenu des contraintes de somme des lignes et des colonnes. Votre code doit générer une affectation à la fois.
Contribution
Votre code doit prendre 3 entiers non négatifs spécifiant les contraintes de ligne et 3 entiers non négatifs spécifiant les contraintes de colonne. Vous pouvez supposer que celles-ci sont valides, c'est-à-dire que les contraintes de somme ou de ligne sont égales à la somme des contraintes de colonne. Votre code peut le faire de la manière qui vous convient.
Production
Votre code doit générer les différentes grilles 2D qu'il calcule dans n'importe quel format lisible par l'homme de votre choix. Plus c'est joli, mieux c'est. La sortie ne doit pas contenir de grilles en double.
Exemple
Si toutes les contraintes de ligne et de colonne sont exactement 1
alors il n'y a que 6
des possibilités différentes. Pour la première ligne, vous pouvez mettre un 1
dans l'une des trois premières colonnes, pour la deuxième ligne il y a maintenant des 2
alternatives et la dernière ligne est maintenant complètement déterminée par les deux précédentes. Tout le reste de la grille doit être défini sur0
.
Supposons que l'entrée 2 1 0
concerne les lignes et 1 1 1
les colonnes. En utilisant le joli format de sortie d'APL, les grilles d'entiers possibles sont:
┌─────┬─────┬─────┐
│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│
└─────┴─────┴─────┘
Supposons maintenant que l'entrée 1 2 3
concerne les lignes et 3 2 1
les colonnes. Les grilles entières possibles sont:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│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│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘