Как вы генерируете список всех возможных строк с учетом генератора символов и длины? - PullRequest
0 голосов
/ 18 декабря 2018

Например, если задано ['a', 'b'] (как генератор) и 2 как длина

, функция выдаст генератор, который выдаст:

'',
'a',
'b',
'ab'
'ba'
'aa'
'bb'

или даст ['a'] идлина 3:

'',
'a',
'aa',
'aaa',

Как вы можете себе представить, этот набор станет намного больше, если будет добавлено больше букв или увеличена длина, в нем должны быть перечислены все перестановки указанных символов вплоть до длины

1 Ответ

0 голосов
/ 18 декабря 2018

Вот довольно понятное решение.

//Returns all permuations of a certain length.
function perm($ls, $len)
{
    if($len <= 0)
        yield '';
    else
        foreach ($ls as $x)
            foreach(perm($ls, $len-1) as $i)
               yield $x.$i;
}

//Returns all permuations of all lengths less or equal to the supplied integer.
function all_perm($ls, $len) {
    //$ls = iterator_to_array($ls);
    for($x=$len; $x>=0; $x--)
        foreach(perm($ls, $len-$x) as $string)
            yield $string;
}

Просто вызовите all_perm с вашим массивом и максимальной длиной.Если аргумент обязательно должен быть генератором, раскомментируйте $ ls = iterator_to_array ($ ls); .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...