Как сгенерировать все вариации слова

200
18 июля 2021, 18:40

Есть слово Hello.

Есть список замен:

H-@
H-*
e-~
l-&

На выходе должно получиться

@ello
@~llo
@~&lo
@~&&o
@e&&o
....

Т.е. надо перебрать все возможные вариации замен. Подскажите примерный алгоритм как это сделать. Можно псевдокодом.

Answer 1

Обычный перебор

private static Dictionary<char, char> _map = new Dictionary<char, char>()
{
    {'H', '@'},
    {'e', '~'},
    {'l', '&'},
};
public void Replace(char[] array, int index = 0){
    if (index >= array.Length) {
        Console.WriteLine(new string(array));
        return;
    }
    char c = array[index];
    Replace(array, index+1);
    if (_map.ContainsKey(c)) {
        array[index] = _map[c];
        Replace(array, index+1);
        array[index] = c;
    }
}

как использовать

Replace("Hello".ToCharArray());

Вывод

Hello
Hel&o
He&lo
He&&o
H~llo
H~l&o
H~&lo
H~&&o
@ello
@el&o
@e&lo
@e&&o
@~llo
@~l&o
@~&lo
@~&&o

UPD

Когда несколько значений в маппинге

private static Dictionary<char, char[]> _map = new Dictionary<char, char[]>()
{
    {'H', new []{'@', '*'}},
    {'e', new []{'~'}},
    {'l', new []{'&'}},
};
public void Replace(char[] array, int index = 0)
{
    if (index >= array.Length)
    {
        Console.WriteLine(new string(array));
        return;
    }
    char c = array[index];
    Replace(array, index + 1);
    if (_map.ContainsKey(c))
    {
        foreach (var r in _map[c])
        {
            array[index] = r;
            Replace(array, index + 1);
        }
        array[index] = c;
    }
}

Вызов

Replace("Hello".ToCharArray());

Вывод

Hello
Hel&o
He&lo
He&&o
H~llo
H~l&o
H~&lo
H~&&o
@ello
@el&o
@e&lo
@e&&o
@~llo
@~l&o
@~&lo
@~&&o
*ello
*el&o
*e&lo
*e&&o
*~llo
*~l&o
*~&lo
*~&&o
READ ALSO
Как сделать паузу в Task(c#)?

Как сделать паузу в Task(c#)?

Есть Task, который запускается при нажатие кнопкиВ нем не используются бесконечные циклы

181
Распознавание штрихкода с PDF файла

Распознавание штрихкода с PDF файла

у меня есть толстое приложение на сканере, которое должно сканировать штрихкод с PDF - файлаШтрихкод включает в себя 3 значения [Текстовое значение][пробел][Текстовое...

171
Взаимодействие C# WindowsForm ComboBox и Firebase

Взаимодействие C# WindowsForm ComboBox и Firebase

Основная проблема найти пример того, как в ComboBox Items вставлять ряд данных из базы Firebase, к примеру при нажатии кнопки

340
C# WPF задать стиль для ContentPresenter&#39;ов которые внутри GridViewRowPresenter

C# WPF задать стиль для ContentPresenter'ов которые внутри GridViewRowPresenter

GridView состоит с GridViewRowPresenter'ов и если GridViewColumn задан DataTemplate для ячеек, то внутри GridViewRowPresenter'а будут не TextBlock а ContentPresenter с тем что мы зададим в DataTemplate...

280