Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Combinazioni tra array ed elementi di array differenti [Difficile]

    Ho 13 array e ciascuno di essi è composto da 4 elementi

    codice:
     
    $uno=array(1,14,27,40);
    $due=array(2,15,28,41);
    $tre=array(3,16,29,42);
    $quattro=array(4,17,30,43);
    $cinque=array(5,18,31,44);
    $sei=array(6,19,32,45);
    $sette=array(7,20,33,46);
    $otto=array(8,21,34,47);
    $nove=array(9,22,35,48);
    $dieci=array(10,23,36,49);
    $undici=array(11,24,37,50);
    $dodici=array(12,25,38,51);
    $tredici=array(13,26,39,52);
    Devo generare tutte le combinazioni possibili in modo tale che valgano le seguenti regole:

    1. le combinazioni devono essere di 5 elementi
    2. bisogna prendere un solo elemento per ogni array
    2. gli elementi estratti devono essere sempre presi da array in successione (es. $tre, $quattro, $cinque, $sei, $sette)
    3. le combinazioni devono essere ordinate in ordine crescente e separate da uno spazio (i risultati finali devono essere stampati così 1 4 15 29)

    Ho provato con array_rand e con un ciclo for ma i non ho ottenuto alcun risultato.

    codice:
     
    $randuno=array_rand($uno, 1);
    $randdue=array_rand($due, 1);
    $randtre=array_rand($tre, 1);
    $randquattro=array_rand($quattro, 1);
    $randcinque=array_rand($cinque, 1);
    $randsei=array_rand($sei, 1);
    $randsette=array_rand($sette, 1);
    $randotto=array_rand($otto, 1);
    $randnove=array_rand($nove, 1);
    $randdieci=array_rand($dieci, 1);
    $randundici=array_rand($undici, 1);
    $randdodici=array_rand($dodici, 1);
    $randtredici=array_rand($tredici, 1);
    
    
    $scalaA=array($uno[$randuno],$due[$randdue],$tre[$randtre],$quattro[$randquattro],$cinque[$randcinque]);
    sort($scalaA);
    print_r($scalaA[0]." ".$scalaA[1]." ".$scalaA[2]." ".$scalaA[3]." ".$scalaA[4]);

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    dai un'occhiata qui .
    La prima risposta funziona per array e stringhe. Quindi potresti fare un solo array che contiene tutti e 52 gli elementi e poi prendere solo le combinazioni valide.
    In ogni combinazione ordinata devi considerare per ogni elemento che l'elemento successivo NON deve differire di 13. Se anche uno solo degli elementi non soddisfa tale condizione la combinazione non è valida.
    Non è la soluzione più elegante ma è abbastanza semplice.

  3. #3
    ho provato a fare una cosa del genere ma il risultato non è stato ottimale...

    mi serve proprio che si generino le combinazioni tipo:

    $uno[0] $due[0] $tre[0] $quattro[0] $cinque[0]
    $uno[0] $due[0] $tre[0] $quattro[0] $cinque[1]
    $uno[0] $due[0] $tre[0] $quattro[0] $cinque[2]

    ecc ecc fino ad arrivare alla combinzaione

    $nove[3] $dieci[3] $undici[3] $dodici[3] $tredici[3]

  4. #4
    ho quasi risolto facendo così

    codice:
    for($a=0; $a<5; $a++){
    for($b=0; $b<5; $b++){
    for($c=0; $c<5; $c++){
    for($d=0; $d<5; $d++){
    for($e=0; $e<5; $e++){
    
    $prova=array($asso[$a],$due[$b],$tre[$c],$quattro[$d],$cinque[$e]);
    sort($prova);
    print_r($prova[0]." ".$prova[1]." ".$prova[2]." ".$prova[3]." ".$prova[4]." _ ");
    
    }}}}}
    il problema ora è che mi stampa anche i risultati di lunghezza inferiore a 5 elementi... suggerimenti per evitarlo?

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Codice PHP:
    for($a=0$a<3$a++){
    for(
    $b=0$b<3$b++){
    for(
    $c=0$c<3$c++){
    for(
    $d=0$d<3$d++){
    for(
    $e=0$e<3$e++){

    $prova=array($uno[$a],$due[$b],$tre[$c],$quattro[$d],$cinque[$e]);
    sort($prova);
    print_r($prova[0]." ".$prova[1]." ".$prova[2]." ".$prova[3]." ".$prova[4]." _ ");

    }}}}} 
    Comunque non ti dà tutte le combinazioni.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    devo ripetere il codice per gli altri array per avere tutte le combinazioni possibili...
    codice:
    array:
    //1 2 3 4 5
    //2 3 4 5 6
    //3 4 5 6 7
    //4 5 6 7 8
    //5 6 7 8 9
    //6 7 8 9 10
    //7 8 9 10 11
    //8 9 10 11 12
    //9 10 11 12 13

    Il vero problema, come sopra citato, è che mi stampa anche i risultati di lunghezza inferiore a 5... una soluzione per evitarlo?

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova il codice che ho postato.

    Domanda.

    // 1 3 4 5 6 o 1 8 9 10 11 non va ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Codice PHP:
    print_r($prova[0]." ".$prova[1]." ".$prova[2]." ".$prova[3]." ".$prova[4]." _ "); 
    Ma come fa a darti sequenze < 5, se stampi sempre 5 elementi ?

    @badaze, probabilmente ti è sfuggito questo
    1. le combinazioni devono essere di 5 elementi
    2. bisogna prendere un solo elemento per ogni array
    2. gli elementi estratti devono essere sempre presi da array in successione (es. $tre, $quattro, $cinque, $sei, $sette)
    3. le combinazioni devono essere ordinate in ordine crescente e separate da uno spazio (i risultati finali devono essere stampati così 1 4 15 29)

  9. #9
    questo è il codice. prova anche tu

    codice:
     
    $uno=array(1,14,27,40);
    $due=array(2,15,28,41);
    $tre=array(3,16,29,42);
    $quattro=array(4,17,30,43);
    $cinque=array(5,18,31,44);
    
    
    //1 2 3 4 5
    
    for($a=0; $a<=4; $a++){for($b=0; $b<=4; $b++){for($c=0; $c<=4; $c++){for($d=0; $d<=4; $d++){for($e=0; $e<=4; $e++){
    
    		$prova=array($uno[$a],$due[$b],$tre[$c],$quattro[$d],$cinque[$e]);
    		sort($prova);
    		$scalacomb=$prova[0]." ".$prova[1]." ".$prova[2]." ".$prova[3]." ".$prova[4]."_";
     		print_r($scalacomb);
    
    }}}}}

  10. #10
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Originariamente inviato da boots
    Codice PHP:
    print_r($prova[0]." ".$prova[1]." ".$prova[2]." ".$prova[3]." ".$prova[4]." _ "); 
    Ma come fa a darti sequenze < 5, se stampi sempre 5 elementi ?
    E' solo che nel suo codice le clausole finali dei cicli for vanno fino a 5 quindi un valore maggiore del numero di elementi negli array. Quindi a certi momenti ottiene un bel "undifined offset"

    Originariamente inviato da boots
    @badaze, probabilmente ti è sfuggito questo
    In effetti.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

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.