Появилась возможность расставить точки в слове, после каждой буквы. Даже так, нагенерировать все возможные варианты, без повторений. Колдовал часик, получилось так: PHP: <?php $str = "ocicancel"; $lstr = strlen( $str ); for( $i = 0; $i < $lstr; $i++ ) { echo substr( $str , 0 , $lstr - $i ) . "." . substr( $str , $lstr-$i , $i ) . "<br>"; } ?> Вывод: Код (Text): ocicancel. ocicance.l ocicanc.el ocican.cel ocica.ncel ocic.ancel oci.cancel oc.icancel o.cicancel Теперь нужно каждое слово надо обратно прогнать по циклу. Как их сохранять? в текстовом файле или массив создавать? Еще как-то проверить что бы точки подряд не ставились.
понимаю что автору это уже нафиг не уперлось, но мне стало интересно, в общем вот решение: PHP: /* суть алгоритма вот в чем, количество итераций у нас 2 ^ n , где n это количество символов номер итерации можно представить в двоичном виде двоичное представления номера итерации это по сути карта точек причем количество битов совпадает с количеством символов, 0 или 1 указывает на необходимость нарисовать точку ну далее для каждой итерации по её двоичному представлению преобразовываем слова $nMaxIter - 2 так как реально количество итераций уменьшено на первой итерации мы сразу перескакиваем на единичку, так как 0 нет смысла обрабатывать и последняя итерация нам не нужна, так как там будет переход регистра, который также обнулит все биты */ $sBaseWord = "ocicancel"; //смысл этой штуки в подсчете количества итераций $nMaxIter = pow(2, mb_strlen($sBaseWord)); $iter = 0; while($iter <= ($nMaxIter - 2)){ echo getWord($sBaseWord, (++$iter)) . '<br/>'; } function getWord($sBaseWord, $nIter){ $sResWord = ""; $nMaxIndex = mb_strlen($sBaseWord) - 1; for($i = 0; $i <= $nMaxIndex; $i++){ $sResWord .= mb_substr($sBaseWord, $i, 1); $sResWord .= (($nIter & (1 << $i)) ? '.' : '' ); } return $sResWord; }