LINUX.ORG.RU

Составить скрипт на python для сложного перебора

 ,


0

1

Здрасьте всем. Помогите плиз составить скрипт на python для генерации в список всех возможных комбинаций по нужной маске методом последовательного перебора (WordList). Поясню, чем мне не нравятся уже готовые проги, будет более понятна суть что требуется. Нужна очень тонкая подстройка, к сожалению то, чем пользовался, не дает нужного функционала. Например, crunch на линукс, - отсутствует возможность задать маску типа X-XX1X, где X - это и буква и цифра одновременно. А в crunch можно либо букву либо цифру. Там есть опция, где можно задать нужные символы в лист charset.lst, но тогда нужно перебирать все возможные комбинации, все бы ничего, но когда нужно перебрать допустим все комбинации из 20 символов, тут возникают проблемы с очень огромным списком, это и время и нет такого места на HDD (вместо того, чтобы порой в нужной маске перебора ограничится одним-нескольким символом, а так придется перебирать все). Или например старая прога mr.gen . Можно задать все нужные комбинации для каждого символа, но тут отсутствует возможность разбития получаемого списка на части, что при огромных списках нереально. Проги конечно есть еще, я далеко не все знаю и юзал, так что, если Вы увидев что нужно, подскажете мне нужную уже готовую именно с нужным функционалом, я не откажусь. Крайне желательно под линукс. А пока, буду признателен, если поможете сваять свою на python. Я не программист, python только недавно стал изучать, пока мне сложно, хотя по сути скрипт не такой уж и сложный.

Примерная схема скрипта: Скрипт должен последовательно методом перебора сгенерировать все возможные комбинации, сохранить все это в текстовый документ построчно с обязательным сохранением отдельными кусками по нужному задаваемому кол-ву строк в куске. Причем, запоминать последнюю комбинацию сохраненную, чтобы начинать сохранение следующего куска по требованию с этого места. И так пока все возможные комбинации не будут сгенерированы и сохранены. Нужно задать на ввод: 1. кол-во символов перебираемой комбинации 2. По каждому номеру символа задать отдельно все используемые символы 3. Кол-во строк (то есть сгенерированных вариантов), сохраняемых в текстовый файл (или его фрагмент). Хорошо конечно, если скрипт изначально просчитает чисто математически кол-во всех комбинаций и выдаст инфу о кол-ве фрагментов текстового файла (относительно задаваемого кол-ва комбинаций в каждом отдельном случае) Общий процент выполнения и т.п. конечно хорошо для функционала, но не критично. Достаточно просто визуализации какой-то для понимания что процесс идет или отдельный кусок текста уже готов.

то есть как мне видится простая оболочка задачи на ввод: 1. введите кол-во символов в комбинации: (число) 2. задайте все символы для первого символа: (можно подряд, можно через запятую, можно хоть как) 3. задайте все символы для второго символа: и так далее отдельно по каждому символу 4. задайте кол-во комбинаций (строк) в каждом фрагменте общего списка: 5. Укажите путь для сохранения текcтового документа: (txt или lst ) его наименование (пусть присваивает в конце к названию допустим номер фрагмента)

Как-то так. Спасибо, если поможете. Если задача трудная и лень ковыряться, то могу рассмотреть вопрос о платном выполнении этой задачи, если конечно ценник будет недорог.

Вообще непонятно зачем в файл сохранять. Т.к. перестановка зависит от начальных условий, то нужно просто алгоритм вывода из порядкового номера.

Например: имеем N слов. Это N! перестановок. При этом каждая группа побывает на месте n ровно (n-1)! раз. Таким образом получается алгоритм

Запоминаем требуемый номер Z. Для всех n 0..N: вывести слово с индексом Z div (n-1)!, запомнить новый номер Z = Z mod (n-1)!

В результате в файле части перестановок нужно только сохранить словарь, индекс начальной перестановки, индекс конечной перестановки.

Хранить сами перестановки бессмысленно.

anonymous ()
Ответ на: комментарий от anonymous

Пардон там же без повторов. Тогда так:

Запоминаем требуемый номер Z. Для всех n 0..N: вывести слово с индексом n + Z div (n-1)!, запомнить новый номер Z = Z mod (n-1)!

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.