Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    rand() Generazione Partite in tornei

    in poche parole io ho una serie di elementi in un array
    ad esempio a,b,c,d

    vorrei che casualmente mi venissero estratti ed accoppiato in modo che vengano presi tutti una sola volta:

    a - b
    c - d

    a - c
    b - d

    a - d
    b - c

    in poche parole mi servirebbe per la creazione casuale di partite..
    avete qualcosa in mente?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    Questo fa per te

    codice:
    srand ((float) microtime() * 10000000);
    ## Squadre
    $input = array ("a", "b", "c", "d");
    
    
    ## Chiavi dell'array con le due squadre
    ## In chiavi[0] avrai la prima squadra e in $chiavi[1] la seconda
    ## Fai l'iterazione per tutte le squadre e mano a mano elimini le due estratte
    
    while(count($input)!=0){
    
      $chiavi = array_rand ($input, 2);
      
    ## Salvi le squadre antagoniste nei due array
      $colonnaA[] = $input[$chiavi[0]];
      $colonnaB[] = $input[$chiavi[1]];
      
    ## Salvo il valore temporaneamente
      $tmpElm = $input[$chiavi[1]];  
    
      $index  = $chiavi[0];
       
      $input = array_splice($input, $index, 1);
    
    ## Trovi la nuova chiave per il secondo elemento inserito
    ## tanto le squadre non hanno i nomi uguali
    
      $index  = array_search($tmpElm, $input);
       
      $input = array_splice($input, $index, 1);
      
    
    }
    
    ## in $colonnA hai tuttle squadre che comeptono con $colonnaB
    Non l'ho provato.. magari puoi anche ottimizzarlo
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  3. #3
    Warning: array_rand(): Second argument has to be between 1 and the number of elements in the array in XXXX on line 14

    la riga 14 è
    $chiavi = array_rand ($input, 2);

    va all'infinito sto ciclo..ora vedo di capirlo..
    grazie comunque..

  4. #4
    Ricordo che tempo fa provai a far generare un calendario delle partite di un torneo, con esiti deludenti.
    La cosa non è affatto semplice come sembra, soprattutto se poi inizi a metterci dentro delle regole tipo:
    - una squadra deve giocare alternativamente un turno in casa e uno fuori;
    - se hai dei derby, all'andata dev'essere in casa una squadra, al ritorno l'altra squadra;
    - non ricordo che altri problemi c'erano, ma erano tanti...
    Alla fine ho rinunciato.
    All work and no play makes EricFlat a dull boy

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    codice:
    <?php 
    srand ((float) microtime() * 10000000);
    
    ## Squadre
    $input = array ("a", "b", "c", "d");
    
    
    ## Chiavi dell'array con le due squadre
    ## In chiavi[0] avrai la prima squadra e in $chiavi[1] la seconda
    ## Fai l'iterazione per tutte le squadre e mano a mano elimini le due estratte
    
    while(count($input)!=0){
    
      $chiavi = array_rand ($input, 2);
      
    ## Salvi le squadre antagoniste nei due array
      $colonnaA[] = $input[$chiavi[0]];
      $colonnaB[] = $input[$chiavi[1]];
      //print_r($colonnaA);
    ## Salvo il valore temporaneamente
      $tmpElm = $input[$chiavi[1]];  
    
      $index  = $chiavi[0];
       
      array_splice($input, $index, 1);
    
    ## Trovi la nuova chiave per il secondo elemento inserito
    ## tanto le squadre non hanno i nomi uguali
    
      $index  = array_search($tmpElm, $input);
       
      array_splice($input, $index, 1);
      
    
    }
    
    ## in $colonnA hai tuttle squadre che comeptono con $colonnaB
    print_r($colonnaA);
    print_r($colonnaB);
    
    ?>
    Questo funziona
    Ciao
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  6. #6
    grazie ancora leandro..
    sn riuscito a farmi stampare una ipotetica giornata..
    codice:
    <?php
    
    
    srand ((float) microtime() * 10000000);
    
    ## Squadre
    $input = array ("Bari", "Juventus", "Milan", "Fiorentina");
    
    
    ## Chiavi dell'array con le due squadre
    ## In chiavi[0] avrai la prima squadra e in $chiavi[1] la seconda
    ## Fai l'iterazione per tutte le squadre e mano a mano elimini le due estratte
    
    while(count($input)!=0){
    
      $chiavi = array_rand ($input, 2);
      
    ## Salvi le squadre antagoniste nei due array
      $colonnaA[] = $input[$chiavi[0]];
      $colonnaB[] = $input[$chiavi[1]];
      //print_r($colonnaA);
    ## Salvo il valore temporaneamente
      $tmpElm = $input[$chiavi[1]];  
    
      $index  = $chiavi[0];
       
      array_splice($input, $index, 1);
    
    ## Trovi la nuova chiave per il secondo elemento inserito
    ## tanto le squadre non hanno i nomi uguali
    
      $index  = array_search($tmpElm, $input);
       
      array_splice($input, $index, 1);
      
    
    }
    
    ## in $colonnA hai tuttle squadre che comeptono con $colonnaB
    for ($i=0;$i<=2;$i++) {
    $partita =("$colonnaA[$i] - $colonnaB[$i]
    
    ");
    echo ("$partita");
    }
    
    ?>
    ma se io volessi generarne l'intero torneo anche sola andata(per il ritorno basterebbe invertire i valori?
    ho pensato di controllare la $partita e generare fin quando nn sono terminate le possibili soluzioni..
    ma come si può fare?
    è l'ultima domanda che ti faccio..grazie mille ancora una volta
    Nicola

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    613
    questa è un tantino più complicata.. vedo se riesco a fare qualcosa stasera, ora non posso

    Comunque per il ritorno se non erro basta che inverti i nomi delle squadre nelle giornate di campionato, cioè si, ti basta creare il girone di andata

    Ciao ciao
    Conosci te stesso(?)
    (..e allora perchè scassi a me? )

  8. #8
    si..esatto..per il ritorno nn è un problema..
    il problema è creare l'andata.. :master:
    beh..attendo tue notizie..
    grazie ancora..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.