Генератор паролей с маской
Итак, задали мне тут задачку, нужно генерировать пароли по маске. При чем не просто генерировать, а выводить все доступные варианты.
Допустим у меня есть входная строка "123456[x][x]", где "123456" - маска. И есть строка alphabet, в которой лежат все символы, например "abcde". И мне нужно перебрать все варианты, например "123456ab", "123456ac", "123456ad" и тд. И я представляю себе как сделать это для одного или двух заменяемых символов, но если их будет больше? Голова уже болит, прошу помощи
Все это я буду собирать в android-прогу, выводящую результат. Не спрашивайте зачем, я и сам не знаю, такой заказ
Ответы (1 шт):
Если я правильно понял, как именно требуется генерировать текст, то вот сразу результат работы:
При mask = "123456[x][x]" и alphabet = "abcde". (Так же алгоритм работает при любом кол-ве [x])
Если вам это и нужно, то объясню идею:
Первое что я сделал, это нашел индексы
[x], как будто это 1 символ. Напримерmask = 1[x]2345[x][x], то я получаю массив1 6 7.Далее я заменяю все
[x]на любой один символ, например?.Потом пишем функцию
NextSetдля генерации размещений без повторений. Вот тут есть реализация наc++(p.s. на сайте есть ошибка в функцииj = n - 2, а неj = n - 1)Остается находить размещения
alphabetдлиннойnпоcount, гдеcountкол-во[x]в маске. И заменять по индексам найденным в 1 пункте символы изalphabet
Например mask = 123456[x][x], alphabet = abcde
- Массив с индексами
[x]будет таким[6, 7] - Далее получаем измененную строку, заменяя
[x]на?. В нашем случае она будет такой:genStr = 123456?? - ...
- Первое размещение
alphabetбудет[a, b], тогда по индексу6в строкеgenStrмы меняем этот символ наa, а по индексу7наb. Потом будет[a, c]делаем аналогично.
Все!
