ďťż

[php] generowanie ciągów znaków wszystkich możliwych

       

Podstrony


telcocafe

Chciałbym wygenerować wszystkie możliwe ciągi trzyliterowe z zakresu podanych znaków.
Przykład:
$znaki = Array('a', 'b', 'c');
Taki ciąg wypisuje:

abc
acb
bac
bca
cab
cba
...

Liczba znaków może być nieograniczona.
Da się coś takiego zrobić? Jeżeli tak to prosze o podpowiedź. Szukałem, sprawdzałem w różnych miejscach, ale nic ciekawego nie znalazłem.



<?php $literki = array('a','b','c','d'); function zrobCiag($tablica) { $l = 0; for ($i=0;$i<sizeof($tablica);$i++) { for ($j=0;$j<sizeof($tablica);$j++) { for ($k=0;$k<sizeof($tablica);$k++) { $wyniki[$l] = $tablica[$i].$tablica[$j].$tablica[$k].'< br />'; $l++; } } } return $wyniki; } $wynik = zrobCiag($literki); print_r($wynik); ?>
O to chodziło?

tia ... a jak bedzie milion pincet elementow to bedziesz mial wiecej petli niz jakikolwiek napisany program ... tu trza rekurencji :)


tia ... a jak bedzie milion pincet elementow to bedziesz mial wiecej petli niz jakikolwiek napisany program ... tu trza rekurencji :)

Chciałbym wygenerować wszystkie możliwe ciągi trzyliterowe z zakresu podanych znaków.

Z tego co zrozumiałem, to znaków może być ho-ho-ho i jeszcze trochę, a ciągi zawsze mają być trzyliterowe. :P Chyba, że źle zrozumiałem, to rekurencja ofc.



No to jak to jest źle co napisał bryn to moze to co ja napisalem jest dobre:
<?php Function losuj($tablica) { $ilosc = count($tablica); $mozliwosci = $ilosc * ($ilosc-1) * ($ilosc-2); while($mozliwosci>0) { shuffle($tablica); $opcja = $tablica[0].$tablica[1].$tablica[2]; if(!$opcje) $opcje = array(); if(in_array($opcja, $opcje)) $mozliwosci++; if(!in_array($opcja, $opcje)) $opcje[] = $opcja; $mozliwosci--; } return $opcje; } $tablica = array('a', 'b', 'c'); $opcje = losuj($tablica); sort($opcje); foreach($opcje as $opcja) echo $opcja.'<br />'; ?> :P

edit: chociaż nie wiem czy autorowi chodziło o to że literki mogą się powtarzać czy też nie... w moim się nie powtarzają w jednej kombinacji :P

Na moim komputerze wygenerowało ciągi z całego alfabetu w 9 sekund :]
Użytkownik master_dos edytował ten post 21 styczeń 2007, 19:16
master_dos: a gdzie u Ciebie wspomniana rekurencja?

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.