Как вы генерируете список всех возможных строк с учетом генератора символов и длины?

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

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

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

или дано ['a'] и длиной 3:

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

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

2

Решение

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

//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);.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector