Problem
Betrachten Sie ein Quadrat aus nicht negativen ganzen Zahlen im Verhältnis 3 zu 3. Für jede Zeile wird i
die Summe der ganzen Zahlen auf gesetzt r_i
. In ähnlicher Weise wird für jede Spalte j
die Summe der Ganzzahlen in dieser Spalte auf gesetzt c_j
.
Die Aufgabe besteht darin, Code zu schreiben, um alle möglichen unterschiedlichen Zuordnungen von Ganzzahlen zu dem Raster unter Berücksichtigung der Summenbedingungen für Zeilen und Spalten aufzulisten. Ihr Code sollte jeweils eine Zuweisung ausgeben.
Eingang
Ihr Code sollte 3 nicht negative Ganzzahlen, die die Zeilenbeschränkungen angeben, und 3 nicht negative Ganzzahlen, die die Spaltenbeschränkungen angeben, enthalten. Sie können davon ausgehen, dass diese gültig sind, dh dass die Summen- oder Zeileneinschränkungen der Summe der Spalteneinschränkungen entsprechen. Ihr Code kann dies auf jede bequeme Weise tun.
Ausgabe
Ihr Code sollte die verschiedenen 2D-Gitter, die er berechnet, in einem von Menschen lesbaren Format Ihrer Wahl ausgeben. Je schöner, desto besser natürlich. Die Ausgabe darf keine doppelten Raster enthalten.
Beispiel
Wenn alle Zeilen- und Spalteneinschränkungen exakt sind, 1
gibt es nur 6
verschiedene Möglichkeiten. Für die erste Reihe können Sie eine 1
in eine der ersten drei Spalten einfügen, für die zweite Reihe gibt es jetzt 2
Alternativen und die letzte Reihe ist jetzt vollständig durch die beiden vorhergehenden bestimmt. Alles andere im Raster sollte auf eingestellt sein 0
.
Angenommen, die Eingabe gilt 2 1 0
für die Zeilen und 1 1 1
für die Spalten. Unter Verwendung des schönen Ausgabeformats von APL sind die möglichen Ganzzahlgitter:
┌─────┬─────┬─────┐
│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│
└─────┴─────┴─────┘
Sagen wir nun, die Eingabe gilt 1 2 3
für die Zeilen und 3 2 1
für die Spalten. Die möglichen Ganzzahlgitter sind:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│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│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘