Problema
Considera una griglia quadrata 3 per 3 di numeri interi non negativi. Per ogni riga i
viene impostata la somma degli interi r_i
. Allo stesso modo per ogni j
colonna è impostata la somma degli interi in quella colonna c_j
.
Il compito è scrivere codice per enumerare tutte le possibili diverse assegnazioni di numeri interi alla griglia dati i vincoli di somma di riga e colonna. Il tuo codice dovrebbe generare un compito alla volta.
Ingresso
Il codice deve assumere 3 numeri interi non negativi che specificano i vincoli di riga e 3 numeri interi non negativi che specificano i vincoli di colonna. Si può presumere che siano validi, ovvero che i vincoli di somma o riga siano uguali alla somma dei vincoli di colonna. Il tuo codice può farlo in qualsiasi modo sia conveniente.
Produzione
Il tuo codice dovrebbe generare le diverse griglie 2D che calcola in qualsiasi formato leggibile dall'uomo che preferisci. Più carina è, meglio ovviamente. L'output non deve contenere griglie duplicate.
Esempio
Se tutti i vincoli di riga e colonna sono esattamente 1
allora ci sono solo 6
diverse possibilità. Per la prima riga puoi inserire a 1
in una delle prime tre colonne, per la seconda riga ora ci sono 2
alternative e l'ultima riga è ora completamente determinata dalle due precedenti. Tutto il resto nella griglia dovrebbe essere impostato su 0
.
Supponiamo che l'input sia 2 1 0
per le righe e 1 1 1
per le colonne. Usando l'adorabile formato di output di APL, le possibili griglie di interi sono:
┌─────┬─────┬─────┐
│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│
└─────┴─────┴─────┘
Ora supponiamo che l'input sia 1 2 3
per le righe e 3 2 1
per le colonne. Le possibili griglie intere sono:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│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│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘