ďťż
Podstrony
|
telcocafeMam np tak tablice:cos[0][0]="l"; cos[0][1]="ł"; cos[1][0]="a"; cos[1][1]="ą" cos[2][0]="s"; cos[2][1]="ś"; I chce zrobic zeby w innej tablicy zapisaly sie wszystkie kombinacje wyrazow (nie koniecznie musza cos znaczyc), z tym, że cos[0][0] i cos[0][1] to pierwsze litery wyrazu cos[1][0] cos[1][1] to 2 litery etc czyli np las łas ląs łąs laś ląś etc ma ktos jakis pomysl na pętle? Użytkownik MikolajOsowski edytował ten post 01 październik 2006, 15:21 <? $cos[0][0]='l'; $cos[0][1]='ł'; $cos[1][0]='a'; $cos[1][1]='ą'; $cos[2][0]='s'; $cos[2][1]='ś'; foreach($cos[0] as $i) { foreach($cos[1] as $j) { foreach ($cos[2] as $k) { $wyrazy[] = $i.$j.$k; } } } foreach ($wyrazy as $wyraz) { echo $wyraz.'</br>'; } ?> Użytkownik El Mariachi edytował ten post 01 październik 2006, 16:24 działa, ale to co tam dalem to jest tylko przykład ze takich par jak ta: $cos[1][0]='a'; $cos[1][1]='ą'; jest x czyli jest ich tyle: count($cos) działa, ale to co tam dalem to jest tylko przykład ze takich par jak ta: $cos[1][0]='a'; $cos[1][1]='ą'; jest x czyli jest ich tyle: count($cos) Pomyśl nad rekurencjyjnym rozwiązaniem Pomyśl nad rekurencjyjnym rozwiązaniem Oczywiście jak napisał Kodie rekurencyjne rozwiązanie będzie dobre ale jako ciekawostkę wymyśliłem iteracyjny algorytm bazujący na koniunkcji bitowej /bardzo możliwe, że może niepoprawnie się zachowywać bo obliczenia robiłem na szybko na wykładzie, ale dla 3 i 4 elementów jeszcze działa ;) / <? $cos[0][0]='l'; $cos[0][1]='ł'; $cos[1][0]='a'; $cos[1][1]='ą'; $cos[2][0]='s'; $cos[2][1]='ś'; $cos[3][0]='u'; $cos[3][1]='ó'; for($i=0, $ile = pow(2, count($cos)); $i<$ile; $i++) { $wyraz = ''; for($j=1; $j < $ile; $j*=2) { if($i & $j) { $wyraz .= $cos[log($j,2)][1]; } else { $wyraz .= $cos[log($j,2)][0]; } } $wyrazy[] = $wyraz; } foreach($wyrazy as $a) { echo $a.'</br>'; } ?> //EDIT: zapomniał bym: Pozdrowienia Kodie - kopę lat :] chyba rok czasu nie byłem na tym forum Użytkownik El Mariachi edytował ten post 02 październik 2006, 14:48 El Mariachi, Dzinx działa, ale jak mam np taka tablice: co[0][0]=M co[0][1]=M co[1][0]=i co[1][1]=i co[2][0]=k co[2][1]=k co[3][0]=o co[3][1]=ó co[4][0]=l co[4][1]=ł co[5][0]=a co[5][1]=ą co[6][0]=j co[6][1]=j To jak powinien wyglądać skrypt, aby sprawdził czy dany wygenerowany wyraz nie istnieje w tablicy? Jesli by istnial to był by pomijany!? Możesz po prostu wszystkie słowa dodać do tablicy, a na końcu przejechać po niej array_unique() ;) Albo sprawdzić, czy taka wartość już jest, jeśli tak, to continue ;) Użytkownik pbnan edytował ten post 03 październik 2006, 17:19 //EDIT: zapomniał bym: Pozdrowienia Kodie - kopę lat :] chyba rok czasu nie byłem na tym forum hehe fajny pomysł :) Zapamietam sobie ten sposób :) Jeśli działa (a jestem o tym przekonany - sam nie analizowałem:P) to polecam algorytm iteracyjny :) Zużywa mniej pamieci. Tak tylko przypomniało mi się, żebyś pamiętał, że nie pogenerujesz w rozsądnym słów większych niż 25 znaków @MikolajOsowski: Hm.. nie ma wiekszego problemu: ? $cos[0][0]='l'; $cos[0][1]='ł'; $cos[1][0]='a'; $cos[1][1]='ą'; $cos[2][0]='s'; $cos[2][1]='ś'; $cos[3][0]='u'; $cos[3][1]='ó'; for($i=0, $ile = pow(2, count($cos)); $i<$ile; $i++) { $wyraz = ''; for($j=1; $j < $ile; $j*=2) { if($i & $j) { $wyraz .= $cos[log($j,2)][1]; } else { $wyraz .= $cos[log($j,2)][0]; } } $wyrazy[$wyraz] = true; } foreach($wyrazy as $k=>$a) { echo $k.'</br>'; } ?> Tak można to najszybciej zrobić. Program troche zwolnii (bo używa stringów jako klucze) BTW. Też pozdrawiam :) |
|||
Sitedesign by AltusUmbrae. |