[4 jostock] Credo che il tuo codice riesca sì a generare tutti i possibili incontri tra le squadre, ma non riesca a dividerli nelle singole giornate.
Io ho trovato (se vi dico dove non ci crederete mai...) questo sistemino per creare due scontri per ogni coppia di squadre (presumibilmente andata e ritorno) e dividerli nelle singole giornate. Funziona componendo una tabella con i seguenti passi:
1. Nella prima riga si scrivono i "nomi" (qui ho messo numeri da 0 a 9) delle squadre del campionato (qui, appunto, ho supposto che siano 10):
Codice:
0 1 2 3 4 5 6 7 8 9
2. Iniziamo la seconda riga, scrivendo nelle prime 9 (numero squadre meno 1) celle le stesse squadre, ma in ordine inverso. L'ultima cella resta, per ora, vuota:
Codice:
0 1 2 3 4 5 6 7 8 9
8 7 6 5 4 3 2 1 0
3. Le righe successive della tabella (sempre riempite a meno dell'ultima cella) si ottengono roteando la seconda riga di una posizione verso destra. Esaurite le possibili rotazioni, si ottiene questo:
Codice:
0 1 2 3 4 5 6 7 8 9
8 7 6 5 4 3 2 1 0
0 8 7 6 5 4 3 2 1
1 0 8 7 6 5 4 3 2
2 1 0 8 7 6 5 4 3
3 2 1 0 8 7 6 5 4
4 3 2 1 0 8 7 6 5
5 4 3 2 1 0 8 7 6
6 5 4 3 2 1 0 8 7
7 6 5 4 3 2 1 0 8
4. A questo punto riempiamo l'ultima colonna, sostituendo in ogni riga la cella che ha lo stesso nome dell'intestazione di colonna con quella dell'ultima squadra. La squadra sostituita va scritta nell'ultima colonna. In altre parole:
Codice:
0 1 2 3 4 5 6 7 8 9
8 7 6 5 9 3 2 1 0 4
9 8 7 6 5 4 3 2 1 0
1 0 8 7 6 9 4 3 2 5
2 9 0 8 7 6 5 4 3 1
3 2 1 0 8 7 9 5 4 6
4 3 9 1 0 8 7 6 5 2
5 4 3 2 1 0 8 9 6 7
6 5 4 9 2 1 0 8 7 3
7 6 5 4 3 2 1 0 9 8
Finito... ecco come si legge il calendario ottenuto:
1a giornata: sq0 - sq8, sq1 - sq7, sq2 - sq6, sq3 - sq5, sq4 - sq9
2a giornata: sq0 - sq9, sq1 - sq8, sq2 - sq7, sq3 - sq6, sq4 - sq5
3a giornata: sq0 - sq1, sq2 - sq8, sq3 - sq7, sq4 - sq6, sq5 - sq9
4a giornata: sq0 - sq2, sq1 - sq9, sq3 - sq8, sq4 - sq5, sq5 - sq6
... e così via... in pratica metti a scontrarsi la squadra in intestazione con quella corrispondente alla giornata da leggere, eliminando i doppioni.
Rimane solamente da considerare il problema dell'alternarsi tra casa e trasferta, ma ti dovrebbe bastare prendere la squadra che peschi dall'intestazione una volta in casa e l'altra in trasferta.
Altro piccolo dettaglio: l'algoritmo funziona solamente se il numero delle squadre è pari. Se fosse dispari, comunque, ti basta aggiungere una squadra "fantasma" e chi l'affronterà nel campionato in realtà subirà il turno di riposo...
Stammi bene...