|
|
|
| Приветствую уважаемые.
Возникла задача которую я ни как не могу воплотить может вы чем поможете !?
Задача такова:
Имеем
нужно преобразовать в масив со всеми возможными вариациями подстановки символа "." но этот символ не должен стаять не в начале не в конце и 2 точки тоже не может идти подряд. Колличество символов может быть от 2 до "~" !!!
к примеру для должен получиться вот такой итог:
Array
(
[0] => qwer
[1] => q.wer
[2] => qw.er
[3] => qwe.r
[4] => q.w.er
[5] => qw.e.r
[6] => q.we.r
[7] => q.w.e.r
)
|
Выяснил вот что - для того чтобы выяснить колличество вариаций нужно 2 возвести в степень количества символов минус 1.
Помогите кто чем может !!! | |
|
|
|
|
|
|
|
для: Inviseble_Demon
(12.03.2009 в 13:04)
| | Если начальство узнает, чем я занимаюсь на работе...
В общем, есть решение. Правда, оно брутальное.
<?
function ttod($k) //эту функцию (перевод из десятичного в двоичный вид числа) я спер на форуме, вот тут: http://www.softtime.ru/forum/read.php?id_forum=7&id_theme=23008
{
$dn = "";
while ($k >= 2)
{
$m = $dn;
$dn = $k%2;
$dn = $dn.$m;
if ($k%2 == 0)
{
$k = $k/2;
}
else
{
$k = ($k-$k%2)/2;
}
}
if ($k == 1) $dn = "1".$dn;
if ($dn == 1) $dn = "0".$dn;
return $dn;
}
function dtot($k) //и эту функцию я спер на форуме, вот тут: http://www.softtime.ru/forum/read.php?id_forum=7&id_theme=23008
{
$dn = "";
$l = 0;
while ($k > 1)
{
$p = $k%10;
$k = ($k-$k%10)/10;
if ($p == 0)
{
$l++;
}
else
{
$dn += summ($p,$l);
$l++;
}
}
if ($k == 1) $dn += summ($k,$l);
return $dn;
}
function summ($n,$k) //а эта прилагалась к двум умыкнутым ранее.
{
$um = 2;
for($i=1;$i<$k;$i++)
{
$um = $um*2;
}
$n = $n*$um;
if($k==0) $n=$n;
return $n;
}
$isxodnik="qwertyu";
$str=str_split($isxodnik); //исходник по буквам кладем в массив
$rez=array();
$ed="";
while(strlen($ed)<strlen($isxodnik)-1)$ed="1".$ed;//выражаем максимальный паттерн нужной длины из логических единичек
for($t=1; $t<=dtot($ed); $t++){
$istr=ttod($t);
while (strlen($istr)<strlen($ed)) $istr="0".$istr; //достраиваем паттерн до нужной длины
$i=0;
$str2="";
foreach($str as $s){
$str2.=$s;
if($istr[$i]==1)$str2.="."; //прочесываем массив, и если у текущего паттерна логических триггеров в этом месте единичка, ставим точку
$i++;
}
if(!in_array($str2, $rez)) $rez[]=$str2; //я не знаю, где у меня логическая ошибка, почему 2 раза выводилось одно и то же, поэтому я поставил проверку :).
}
//rsort($rez);
$i=1;
foreach($rez as $s)print $i++." ".$s."<br>";
?>
|
Не знаю, насколько это Вам по душе, но по количеству вариаций, вроде, совпадает... | |
|
|
|
|
|
|
|
для: DJ Paltus
(13.03.2009 в 14:10)
| | ОГРОМНОЕ СПАСИБО !!!
Прям реально респект выручили. | |
|
|
|