Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подбор всех возможных вариаций
 
 автор: Inviseble_Demon   (12.03.2009 в 13:04)   письмо автору
 
 

Приветствую уважаемые.
Возникла задача которую я ни как не могу воплотить может вы чем поможете !?

Задача такова:

Имеем
 $str='qwerty'; 
нужно преобразовать в масив со всеми возможными вариациями подстановки символа "." но этот символ не должен стаять не в начале не в конце и 2 точки тоже не может идти подряд. Колличество символов может быть от 2 до "~" !!!

к примеру для
 $str='qwer'; 
должен получиться вот такой итог:
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.


Помогите кто чем может !!!

  Ответить  
 
 автор: DJ Paltus   (13.03.2009 в 14:10)   письмо автору
 
   для: 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%== 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>";
?>

Не знаю, насколько это Вам по душе, но по количеству вариаций, вроде, совпадает...

  Ответить  
 
 автор: Inviseble_Demon   (15.03.2009 в 23:51)   письмо автору
 
   для: DJ Paltus   (13.03.2009 в 14:10)
 

ОГРОМНОЕ СПАСИБО !!!

Прям реально респект выручили.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования