Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Сгенерировать перестановки A-Z 0-9, 7 позиций (http://forum.oszone.net/showthread.php?t=323835)

nastasa 14-02-2017 16:31 2711715

Сгенерировать перестановки A-Z 0-9, 7 позиций
 
Помогите пожалуйста сгенерировать перестановки с повторениями.
"Слово" из 7 знаков. Знак - буквы латинского алфавита A-Z и числа 0-9

Понимаю, что вариантов будет ооочень много, но хотя бы примерный алгоритм скрипта хотелось бы узнать.
Заранее благодарю!

megaloman 14-02-2017 18:59 2711770

nastasa, Поясните: есть слово из 7 знаков. Эти знаки неизменные? Надо именно из этих 7 знаков путём перестановок получить все возможные сочетания?

nastasa 15-02-2017 00:34 2711815

Цитата:

Цитата megaloman
nastasa, Поясните: есть слово из 7 знаков. Эти знаки неизменные? Надо именно из этих 7 знаков путём перестановок получить все возможные сочетания? »

Не знаю как объяснить, 7 позиций
То есть получить все перестановки с повторениями типа
ABCDIFG
ABCDIFU
ABCDIF1
ABCDIF2
и т. д.
Очень надо :(

Iska 15-02-2017 15:22 2711971

Почему именно на пакетных файлах? Это не лучший выбор.

nastasa 16-02-2017 23:45 2712384

Цитата:

Цитата Iska
Почему именно на пакетных файлах? Это не лучший выбор. »

А что посоветуете использовать?

Iska 17-02-2017 00:29 2712394

Вам для каких целей? Один конечный файл с построчными результатами комбинаций займёт чуть больше 352 с половиной Gb.

Elven 17-02-2017 11:11 2712467

Цитата:

Цитата Iska
конечный файл с построчными результатами комбинаций займёт чуть больше 352 с половиной Gb »

Iska, меня мучает только один вопрос: создал или посчитал?

alpap 17-02-2017 15:11 2712543

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

Iska 17-02-2017 17:06 2712574

Цитата:

Цитата Elven
Iska, меня мучает только один вопрос: создал или посчитал? »

Посчитал, конечно: = N!/(N-M)!, затем перемножил полученный результат (число строк) на (7 символов + 2 символа CrLf на строку).

А вот, кстати, я могу быть и не прав, ибо что-то проглядел про:
Цитата:

Цитата nastasa
с повторениями. »

Цитата:

Цитата nastasa
с повторениями »

и формула будет проще, а результат — ещё толще :).

megaloman 21-02-2017 20:08 2713818

nastasa, Я не силён в комбинаторике, поэтому оценить объём выходного файла не берусь.
Я поставил задачу в общем виде:
Необходимо сформировать все возможные слова длиной M символов.
Набор возможных символов задаётся. Число возможных символов >=M
В сформированном слове не должно быть одинаковых символов.
Вот VBS-скрипт, реализующий эту постановку. После его запуска дождитесь сообщения, что он отработал
Код:

'Sym = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")

Sym = Array("A", "B", "C", "D", "E", "F", "G")      ' Набор символов для составления слов
M = 7                                              ' Длина слова

File_Out = "Z:\Box_Out\kuku.txt"    ' Файл со списком слов (результат работы)

NM = M - 1
ReDim iSym(NM)

NS = UBound(Sym)

For k = 0 To NM
    iSym(k) = k
Next
   
Set FSO = CreateObject("Scripting.FileSystemObject")
Set NFile = FSO.OpenTextFile(File_Out, 2, True)
   
Do While iSym(0) <= NS
    Equ = False
    For k = 0 To NM
        For kk = k + 1 To NM
            Equ = (iSym(k) = iSym(kk))
            If Equ Then Exit For
        Next
        If Equ Then Exit For
    Next
       
    If Not Equ Then
        SS = ""
        For k = 0 To NM
            SS = SS + Sym(iSym(k))
        Next
'        MsgBox SS
        NFile.WriteLine SS
    End If
           
    For k = NM To 0 Step -1
        iSym(k) = iSym(k) + 1
        If iSym(k) <= NS Then Exit For
        If k <> 0 Then iSym(k) = 0
    Next
Loop

NFile.Close

MsgBox "Скрипт отработал"

Определите путь к выходному файлу.
В приведенном примере длина слова M=7
Взят набор из 7 символов "A", "B", "C", "D", "E", "F", "G"
В выходном файле получилось 5040 значений.

Для набора из 8 символов "A", "B", "C", "D", "E", "F", "G", "H" и длине слова M=7
в выходном файле получилось 40320 значений. И время выполнения выросло резко.
Не знаю, но, по видимому, можно применить более эффективный алгоритм.

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


Время: 23:55.

Время: 23:55.
© OSzone.net 2001-