Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Вниз

Перебор символов   Найти похожие ветки 

 
Dest   (2004-01-27 13:07) [0]

Подскажите пожалуйста как можно осуществить перебор символов. Например есть константа a:="0123456789". Как сделать так, чтобы в переменной perem прокручивались все возможные варианты константы а (0,01,02,03...10,11,12...20,21, и т.д.)?


 
Плохиш_   (2004-01-27 13:11) [1]


> чтобы в переменной perem прокручивались все возможные варианты
> константы

У константы a только один возможный вариант!


 
TUser   (2004-01-27 13:24) [2]

Примерная цитата из детской книжки по Бейсику (читал в младшем школьном возрасте)

Ну вот, мы написали свою первую программу. (Перед этим описывалась программа типа let a = 10: let b = 20: let c = a + b: print c). А как быть, если нам потребуется исполнить эту прогу, но с другими данными? Неужели переписывать текст программы заново. Ура, для это есть оператор input!!!

Так вот - пиши для того, чтобы переменная приняла последоватлеьно много разных значений есть оператор for

var i:integer; perem:string;
...
for i:=0 0 to ... do begin
perem:=inttostr(i);
...
end;


 
Dest   (2004-01-27 13:28) [3]

Просто брать и посимвольно записывать в переменную (пусть а даже будет не константа), например:
a:="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm nopqrstuvwxyz";
for i:=1 to length (alph) do
begin
perem:=copy(alph,i,1);
end;
А как сделать, чтобы потом увеличивалась длина этой строки?
Делать много циклов для каждой длины не удобно.


 
Digitman   (2004-01-27 13:28) [4]


> все возможные варианты


согласно твоему описанию задачи

perem = "455533545242087899514053263535635476354354656"

тоже будет "вариантом" ! Ибо содержит только символы из набора символов указанной строки a.

Скажешь - не так ?


 
Sandman25   (2004-01-27 13:31) [5]

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


 
Digitman   (2004-01-27 13:31) [6]


> Dest


по-русски скажи - тебе нужна ф-ция, которая генерирует произвольные строки символов из состава заданных в кач-ве параметра ? так что ли ?


 
Dest   (2004-01-27 13:52) [7]

Да, так прога не выдаст конечный результат, но она будет работать пока не подберет нужную комбинацию символов.
Нет я не хочу сгенерировать произвольную строку, я хочу перебрать все возможные комбинации этих символов, конечно ограничив длину результата.
В предыдущем а и alph одно и тоже.
TUser, перебор не только цифр, но и букв и разных символов.
Нужно получить строку из символов alрh путем перебора. Допустим прокрутил все символы alph на месте первого символа строки, которая должна получиться, как потом сделать так чтобы теперь прокрутить второй символ строки и переключить первый?
Например:
0
1
2
..
01
02
..
09
10
11
..
99
..
001
002
..
010
011
012
..
Подскажите пожалуйста.


 
circul   (2004-01-27 13:57) [8]

В общем если сформулировать вопрос по-умному, то получится так:

Как мне написать Bruteforce generator? :-)


 
Begin   (2004-01-27 13:59) [9]

Насколько я понял, он хочет последовательно все возможные наборы всех возможных длин в пределах максимальной. Угадал ? Если да, то для этого есть така хитра штука.... Рекурсия. Читал ? :)


 
Некто   (2004-01-27 14:10) [10]

То, о чем ты говоришь, называется "перестановка символов" (и как частный случай - сокращенные перестановки). Количество возможных вариантов простых перестановок определяется по формуле N = n!; таким образом, количество вариантов растет в последовательности: для 1 символа - 1 перестановка, для 2-х символов - 2 перестановки, для 3-х символов - 4 перестановки, для 4-х символов - 24 перестановки, для 5 символов - 120 перестановок и т.д. Этому вопросу Дональд Э. Кнут посвятил 2-й том "Искусство программирования: Сортировка и поиск". Там про перестановки - воз и маленькая тележка. Алгоритмы же, в основном - рекурсивные или со вложенными циклами.


 
Некто   (2004-01-27 14:11) [11]

Прошу прощения: "для 3-х символов - 6 перестановок"


 
icWasya   (2004-01-27 14:34) [12]

procedure GenS(const A:string;MaxLength:Integer;ST:TStrings);
procedure F1(const S:Prefix;Level:Integer);
var I:Integer;
begin
if Level=1 then begin
for I:=1 to Length(A) do begin
ST.Add(Prefix+A[I]);
end;
end else begin
for I:=1 to Length(A) do begin
F1(Prefix+A[I],Level-1);
end;
end;
end;
var
J:Integer;
begin
ST.Clear;
for J:=1 to MaxLength do F1("",ST,J);
end;

procedure Form1.Button1Click(Sender:TObject);
begin
GenST("1234567",Memo1.Lines,5);
end;


 
Dest   (2004-01-27 14:49) [13]

Да, это брутфорсер. И правда рекурсия, спасибо.
А что за тип Prefix?


 
Dest   (2004-01-27 15:33) [14]

icWasya, странный пример, а где получается результат? Опиши пожалуйста хотябы идею перебора.


 
Dest   (2004-01-27 17:24) [15]

Поразбирался и подправил код от icWasya (огромное ему спасибо). Код заработал!Вот он:
type prefix=string;
procedure GenS(const A:string;MaxLength:Integer;ST:TStrings);
procedure F1(const S:Prefix;Level:Integer);
var I:Integer;
begin
if Level=1 then begin
for I:=1 to Length(A) do begin
ST.Add(s+A[I]);
end;
end else begin
for I:=1 to Length(A) do begin
F1(s+A[I],Level-1);
end;
end;
end;
var
J:Integer;
begin
ST.Clear;
for J:=1 to MaxLength do F1("",J);
end;

procedure TForm1.Button1Click(Sender:TObject);
begin
GenS("1234567",5,Memo1.Lines);
end;
end.

Подскажите божалуйста, что такое ST.Add. Интуитивно догадываюсь, но хотелось бы точно знать.


 
Begin   (2004-01-27 18:03) [16]

что такое ST.Add

Mетод класса TStrings. :)


 
SergP   (2004-01-27 18:08) [17]


> Подскажите божалуйста, что такое ST.Add. Интуитивно догадываюсь,
> но хотелось бы точно знать.


Это ты в мемо новую строчку со очередным результатом своего брутфорсера добавляешь.

Что-то народ в последнее время сильно увлекся брутфорсингом... К чему бы это?
Вот здесь еще один интересовался:
http://delphimaster.net/view/15-1074936789/


 
Dest   (2004-01-27 18:20) [18]

Всем огромное спасибо, разобрался!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.038 c
3-16159
maxon
2004-01-14 14:26
2004.02.06
форматировать datetime


7-16780
dkDimon
2003-11-18 22:18
2004.02.06
System Tray


1-16222
Builder
2004-01-26 22:52
2004.02.06
StringGrid


3-16073
Zamik
2004-01-12 11:02
2004.02.06
Как получить строку пути из Алиаса


1-16415
Checist [root]
2004-01-22 15:21
2004.02.06
Проблема с фокусом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский