Visualizzazione risultati 1 fino 4 di 4

Discussione: [PHP] Algoritmo per la creazione di un calendario calcistico

  1. #1
    Guest

    Predefinito [PHP] Algoritmo per la creazione di un calendario calcistico

    Salve,

    ho creato un sito per il fantacalcio, ma mi servirebbe un buon algoritmo per la creazione del calendario.

    Ne possiedo già uno ma nel calcolo non segue una regola essenziale:

    le squadre devono sempre alternare una partita in casa ed una fuori.

    Quindi l'algoritmo deve rispettare queste poche regole:

    1) le squadre devono alternare una partita in casa ed una fuori ( al massimo può capitare qualche partita consecutiva in casa )

    2) tutti devo scontrarsi con tutti per una sola volta ( ma questo è logico ;)

    Es:

    4 Squadre: Inter, Juve, Parma, Napoli

    1a Giornata
    Inter - Juve
    Parma - Napoli

    2a Giornata
    Juve - Parma
    Napoli - Inter

    3a Giornata
    Juve - Napoli
    Inter - Parma


    tnx

  2. #2
    Guest

    Predefinito

    se l'algoritmo che possiedi non è molto complesso potremmo provare a "risolvere" il bug del casa/fuori casa...

  3. #3
    Guest

    Predefinito

    Codice PHP:
    $squadre = array();
    $squadre1 = array();
    $calendario = array();
    $g = 1;

    for(
    $i = 0; $i < count($squadre); $i++ )
    {
    unset(
    $squadre1[$i]);
    foreach(
    $squadre1 as $k => $v )
    {
    if( (
    $k % 2) == 0 )
    {
    $calendario[$g][] = $squadre[$i] . " - " . $v;
    }
    else
    {
    $calendario[$g][] = $v . " - " . $squadre[$i];
    }
    }
    $g++
    }
    Il codice non l'ho provato, ma dovrebbe funzionare!

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    [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...
    Ultima modifica di dementialsite : 30-08-2007 alle ore 10.00.14
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •