За последние 24 часа нас посетили 18800 программистов и 1652 робота. Сейчас ищут 939 программистов ...

Поделитесь мыслью. Создание последовательной строки.

Тема в разделе "PHP для новичков", создана пользователем Виталий-82, 2 авг 2018.

  1. Виталий-82

    Виталий-82 Новичок

    С нами с:
    25 окт 2016
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте. Подтолкните плиз на мысль. Необходимо написать функцию, которая при каждом вызове возвращает новую строку. Выглядеть это должно так:

    aaa, aab, aac, aba, abb, abc, aca, acb, acc, baa, bab, bac, bba, bbb, bbc, bca, bcb, bcc, caa, cab, cac, cba, cbb, cbc, cca, ccb, ccc

    Символы используемые в строке должны задаваться в массиве: ['a','b','c'...], для того, чтобы можно было самому устанавливать количество и значение символов. Когда все варианты строки перечислены, то строка должна увеличивается на один символ: aaaa,aaab,aaac,aaba,aabb,aabc,aaca...

    Я понимаю что тут циклами с проверками, но не могу собрать логику. Наведите на мысль. Спасибо!
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а изначально какая задача?
    генерировать пароль? что это за строки?
     
  3. Виталий-82

    Виталий-82 Новичок

    С нами с:
    25 окт 2016
    Сообщения:
    9
    Симпатии:
    0
    задача:

    - получаем строку 'aaa';
    - прибавляем к строке домен 'aaa'.'.com' (прим.);
    - получаем код сайта через file или file_get_contents;
    - если в коде сайта обнаруживаем нужную нам информацию, то возвращаем имя домена, если нет, получаем строку 'aab' и повторяем действия;
     
  4. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    ну так вот есть массив у тебя идешь в цикле по нему в берешь твою строку ааа складываешь ее со с доменном запускаешь file_get_contents проверяешь выдал он тебе ошибку либо подгрузил и в зависомости от результата возвращаешь либо aab либо домен. в чем сложность то?
     
  5. Виталий-82

    Виталий-82 Новичок

    С нами с:
    25 окт 2016
    Сообщения:
    9
    Симпатии:
    0

    сложность в том, что забивать все варианты в массив хлопотно:

    [aaa, aab, aac, aba, abb, abc, aca, acb, acc, baa, bab, bac, bba, bbb, bbc, bca, bcb, bcc, caa, cab, cac, cba, cbb, cbc, cca, ccb, ccc]

    Это только варианты с трёхзначной строкой, когда скрипт их обработает, строка должна стать 4-х значной, там уже вариантов будет в несколько раз больше. А про 5-значную и так далее я уже не говорю. Мне надо чтобы строка создавалась динамически, в зависимости от предыдущей строки.

    Но я уже близко к теме.

    Это то же самое, что и подбор пароля, проверил пароль "ааа", если не подошел, то проверил "aab" и т.д. Не забивать же все возможные варианты пароля вручную. На это не хватит жизни.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
  7. ArtyGrand

    ArtyGrand Активный пользователь

    С нами с:
    4 мар 2017
    Сообщения:
    7
    Симпатии:
    1
    PHP:
    1. <?php
    2. $a = 'aaa';
    3. echo ++$a; //aab
    %)
     
  8. Виталий-82

    Виталий-82 Новичок

    С нами с:
    25 окт 2016
    Сообщения:
    9
    Симпатии:
    0
    Спасибо, я так долго уже давно не ржал, над собой! Ведь я сделал то же самое:

    PHP:
    1. function getString(){
    2.     static $chars = Array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
    3.     static $arr = Array('a','a','a');
    4.     static $first = false;
    5.     $bool = true;
    6.  
    7.     if($first){
    8.         foreach($arr as $val){
    9.             if($val != $chars[count($chars)-1]){$bool = true; break;}
    10.             else{$bool = false;};
    11.         };
    12.  
    13.         if($bool){
    14.             $i = count($arr)-1;
    15.             while($i > -1){
    16.                 if($arr[$i] == $chars[count($chars)-1])$arr[$i] = $chars[0];
    17.                 else{
    18.                     $arr[$i] = $chars[array_search($arr[$i], $chars)+1];
    19.                     break;
    20.                 };
    21.                 $i--;
    22.             };
    23.         };
    24.  
    25.         if(!$bool){
    26.             foreach ($arr as $key => $value) {
    27.                 $arr[$key] = $chars[0];
    28.             };
    29.             $arr[] = $chars[0];
    30.         };
    31.     };
    32.     $first = true;
    33.     return join($arr, '');
    34. };
    35.  
    36. getString(); // aaa
    37. getString(); // aab
    38. getString(); // aac
    39. ...
    40. getString(); // zzz
    41. getString(); // aaaa
    42. getString(); // aaab
    43. ...
    Только в моей функции можно задавать перечисляемые значения.