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

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

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

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

или учитывая ['a'] и длину 3:

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

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

Может быть, это может помочь с перестановками, тогда дело просто в длине. Вы пробовали что-нибудь еще, что мы могли увидеть? Это интересная проблема.

Jaquarh 18.12.2018 16:45

Вы можете начать с это и изменить функцию sampling в соответствии с вашими потребностями или использовать ее в другом цикле для другой длины.

Nesku 18.12.2018 16:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Вы можете сослаться на то, откуда это у вас?

Blackbam 18.12.2018 17:24

@Blackbam Я написал это только что.

Dreuhn 18.12.2018 17:26

Хороший. Коротко и эффективно.

Blackbam 18.12.2018 17:29

Спасибо, мои попытки были далеко не такими элегантными или функциональными.

arcanine 18.12.2018 17:30

Отличная идея - использовать генераторы и ключевое слово yield.

Blackbam 18.12.2018 17:38

Другие вопросы по теме