Ciao, vorrei creare un algoritmo che dato in input un numero N di squadre (per esempio da 1 a 12) mi generi la prima fase con X gironi composti da minimo 3 squadre e al massimo 4.
Poi dovrà generare la seconda fase con lo stesso numero X di gironi della fase 1 ma all'interno dei gironi dovranno esserci squadre che non si sono mai scontrate fra di loro nella fase 1.
La fase 3 è uguale alla seconda con la condizione che i gironi saranno composti da squadre che non si sono mai scontrate fra di loro nelle due fasi precedenti.
Sono consapevole che c'è un numero minimo di squadre per fare soddisfare tutte queste condizioni e probabilmente è >=12 con gironi da 3 squadre.
Questo è l'esempio:
Phase 1
Group A: 1, 2, 3
Group B: 4, 5, 6
Group C: 7, 8, 9
Group D: 10, 11, 12
Phase 2
Group A: 1, 4, 7
Group B: 10, 2, 5
Group C: 8, 11, 3
Group D: 6, 9, 12
Phase 3
Group A: 1, 10, 8
Group B: 6, 2, 11
Group C: 4, 9, 3
Group D: 5, 7, 12
Di seguito vi riporto il codice PHP che ho abbozzato ma che non funziona:
Codice PHP:
<?php
function creaGironi($numeroSquadre) {
if ($numeroSquadre < 3) {
echo "Il numero di squadre deve essere almeno 3.";
return;
}
$squadrePerGirone = min(4, max(3, $numeroSquadre / ($numeroSquadre / 4)));
$numeroGironi = $numeroSquadre / $squadrePerGirone;
$squadre = range(1, $numeroSquadre);
$gironi = [];
for ($i = 0; $i < $numeroGironi; $i++) {
$girone = [];
while (count($girone) < $squadrePerGirone && !empty($squadre)) {
$squadra = array_shift($squadre);
$girone[] = $squadra;
}
$gironi[] = $girone;
}
foreach ($gironi as $indice => $girone) {
echo "Girone " . ($indice + 1) . ": " . implode(", ", $girone) . "\n";
}
$nuoviGironi = [];
$combinazioniPrecedenti = [];
for ($i = 0; $i < count($gironi) - 1; $i++) {
for ($j = $i + 1; $j < count($gironi); $j++) {
$combinazioniPrecedenti[] = [$gironi[$i], $gironi[$j]];
}
}
for ($i = 0; $i < $numeroGironi; $i++) {
$nuovoGirone = [];
foreach ($combinazioniPrecedenti as $coppia) {
$nuovoGirone = array_merge($nuovoGirone, $coppia[0], $coppia[1]);
}
$nuoviGironi[] = array_slice(array_unique($nuovoGirone), 0, $squadrePerGirone);
}
foreach ($nuoviGironi as $indice => $girone) {
echo "Nuovo Girone " . ($indice + 1) . ": " . implode(", ", $girone) . "\n";
}
}
// Esempio di utilizzo
$numeroSquadre = (int) readline("Inserisci il numero di squadre: ");
creaGironi($numeroSquadre);
?>