Newsgroup: it.comp.www.php
Titolo: generare stringhe

avrei bisogno di un algorimo che mi generi delle stringhe in rapida
seguenza, fatte così
aaa
aab
.
.
.
aaz
aba
aca
.
.
.
aza
baa
caa
.
.
zaa
abb
abc
abd
.
.
abz
acb
acd
.
.
acz
insomma, deve generare tutte le combinazioni possibili che si possono
ottenere usando le lettere dell'alfabeto, raggruppate a tre a tre, spero di
essere stato chiaro.
Le varie stringhe, dovrebbero essere stampate a video. Non ho la minima idea
di come fare.. di certo debbo mettere un bel po' di cicli.. ma non so bene
come muovermi, mi potete dare una mano?
Grazie
Andrea

 essere stato chiaro.
Qualcosa del genere
<?php
$lettere = range("a","z");
$num_lettere = count($lettere);
for ($i=0;$i<$num_lettere;$i++) {
 $stringa1 = $lettere[$i];
 for ($k=0;$k<$num_lettere;$k++) {
  $stringa2 = $stringa1.$lettere[$k];
  for ($z=0;$z<$num_lettere;$z++) {
   $stringa3 = $stringa2.$lettere[$z];
   echo $stringa3."<br>\n";
   flush();
  }
 }
}
?>

> Qualcosa del genere
Mi pare che funzioni alla grande, grazie!!
Adesso ho la "fantastica" idea di volerci mettere dentro anche dei numeri,
ho provato a modificare
$lettere = range("a","z");
in
$lettere = range("a","z","0","9");
ma mi dą un errore.
Mi puoi dire come fare?
Ho provato a modificare lo script per avere dei gruppi da 4 lettere, ma dopo
un po' che gira, ottengo questo errore:
Fatal error: Maximum execution time of 30 seconds exceeded in
c:\programmi\apache group\apache\htdocs\decode2.htm on line 29
Mi puoi dire come fare? Io sono andato nel file php.ini ed ho modificato la
voce max_execution_time, ma non cambia nulla: dą sempre quell'errore.
Grazie 1000!
Andrea

Mi puoi dire come fare?
Leggere il manuale della funzione range :-)
Senza averlo letto, azzardo:
	$lettere = range('a','z') . range('0','9');
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

[CUT]
Una cosa ti questo tipo?
$lettere = range("a","z");
$numeri = range("0","9");
$num_lettere = count($lettere);
$num_numeri = count($numeri);
for ($i=0;$i<$num_lettere;$i++) {
 $stringa1 = $lettere[$i];
 for ($k=0;$k<$num_lettere;$k++) {
  $stringa2 = $stringa1.$lettere[$k];
  for ($z=0;$z<$num_lettere;$z++) {
   $stringa3 = $stringa2.$lettere[$z];
    for ($n=0;$n<$num_numeri;$n++) {
    $stringa4 = $stringa3.$numeri[$n];
   echo $stringa4."<br>\n";
   flush();
   }
  }
 }
}

 Mi puoi dire come fare?
Che ti ha fatto di male quel povero server?
Spero che tu non voglia fargli eseguire 1679616 cicli (gruppi di 4.. lettere
e numeri) ogni volta che uno apre la pagina...
Vabbè.. così salva tutto in un file di testo.. dovrebbero essere 8398080
byte - (36^4)*5
NON è una "fantastica" idea quella di farli stampare dal browser... :)
<?php
set_time_limit(100000);
$lettere = range("a","z");
$numeri = range ("0","9");
$lettere = array_merge($lettere,$numeri);
$num_lettere = count($lettere);
$fp = fopen("stringhe.txt","wb");
for ($i=0;$i<$num_lettere;$i++) {
 $stringa1 = $lettere[$i];
 for ($k=0;$k<$num_lettere;$k++) {
  $stringa2 = $stringa1.$lettere[$k];
  for ($q=0;$q<$num_lettere;$q++) {
   $stringa3 = $stringa2.$lettere[$q];
   for ($z=0;$z<$num_lettere;$z++) {
    $stringa4 = $stringa3.$lettere[$z]."\n";
    fputs($fp,$stringa4);
   }
  }
 }
}
fclose($fp);
?>

 $lettere = range('a','z') . range('0','9');
No beh.. sono due array.. serve un merge

 byte - (36^4)*5
Andiamo ot.. ma per dare un'occhiata al file in questione.. sotto win
dovrebbe esserti utile questo:
http://www.notetab.com/
Altri editor di testo potrebbero suicidarsi appena vedono un file di testo
da 8 mega.

> NON è una "fantastica" idea quella di farli stampare dal browser... :)
era in senso ironico, direi che ottimo farli mettere in un file: molto più
veloce!
Vorrei che mi mettesse nel file solo una striga, ad esempio d5b1
Ho modificato lo script in quetso modo, ma non funziona: mi lascia il file
vuoto ;(
Mi puoi dire dove sbaglio?
Grazie!
Andrea
<?php
set_time_limit(100000);
$lettere = range("a","z");
$numeri = range ("0","9");
$cerco="d5b1";
$lettere = array_merge($lettere,$numeri);
$num_lettere = count($lettere);
$fp = fopen("stringhe1.txt","wb");
for ($i=0;$i<$num_lettere;$i++) {
 $stringa1 = $lettere[$i];
 for ($k=0;$k<$num_lettere;$k++) {
  $stringa2 = $stringa1.$lettere[$k];
  for ($q=0;$q<$num_lettere;$q++) {
   $stringa3 = $stringa2.$lettere[$q];
   for ($z=0;$z<$num_lettere;$z++) {
    $stringa4 = $stringa3.$lettere[$z]."\n";
 if ($stringa4=="$cerco")
 {
 fputs($fp,$stringa4);
 }
   }
  }
 }
}
fclose($fp);
?>


 da 8 mega.
Lo uso già, grazie comunque!
Andrea

  if ($stringa4=="$cerco")
Questo non sarà mai true visto che in $stringa4 c'è il \n
Modifica di conseguenza.

 Modifica di conseguenza.
grazie!!
Andrea