Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
ВнизПрога типа брутфорсера (алгоритм) Найти похожие ветки
← →
Delpher_Gray (2003-08-09 20:17) [0]Уважаемые Delph"еры !!
Помогите с алгоритмом программы типа брутфорсера...
Есть строка например из 3-х букв: ABC, нужно из них перебрать все комбинации.
Что-то вроде:
A
B
C
AA
AB
AC
BA
BB
BC
CA
CB
CC
AAA
AAB
AAC
ABA
ABB
ABC
...........
Ну и так далее...
Я скока голову не ломал, не могу предумать алгоритм =(
← →
Омлет (2003-08-09 20:57) [1]Сочувствую.
← →
TButton (2003-08-09 21:05) [2]забей. у мню тоже не получается
← →
Омлет (2003-08-09 21:12) [3]Что же это...
Я боюсь за будущее!
← →
SergP (2003-08-09 21:25) [4]Вот вам небольшой пример. Правда он перебирает немного не в том порядке. Пауру минут потратил чтобы написать и запостить, но щас занят другими делами. Сами уже надеюсь доработаете.
Вот этот кусок проги:
procedure tform1.perebor(const s:string; const n:byte);
var
i:char;
begin
if length(s)>0 then memo1.lines.add(s); // ... brutforce(s);
if length(s)<n then
for i:="A" to "C" do perebor(s+i,n);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
perebor("",3);
end;
Перебирает в такой последовательности
A
AA
AAA
AAB
AAC
AB
ABA
ABB
ABC
AC
ACA
ACB
ACC
B
BA
BAA
BAB
BAC
BB
BBA
BBB
BBC
BC
BCA
BCB
BCC
C
CA
CAA
CAB
CAC
CB
CBA
CBB
CBC
CC
CCA
CCB
CCC
← →
Anatoly Podgoretsky (2003-08-09 21:25) [5]Будущее не предопределено. Терминатор
← →
SergP (2003-08-09 21:27) [6]
Кстати если есть не диапазон а именно строка с дозволенными символами, то я думаю переделать вам не составит труда.
← →
SergP (2003-08-09 21:47) [7]Типа так:
procedure tform1.perebor(const s,c:string; const n:byte);
var
i:byte;
begin
if length(s)<n then
for i:=1 to length(c) do perebor(s+c[i],c,n)
else memo1.lines.add(s); // brutforce (s+i);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
z:byte;
begin
for z:=1 to 3
do begin
perebor("","ABC",z);
end;
end;
← →
SergP (2003-08-09 21:48) [8]Типа так:
procedure tform1.perebor(const s,c:string; const n:byte);
var
i:byte;
begin
if length(s)<n then
for i:=1 to length(c) do perebor(s+c[i],c,n)
else memo1.lines.add(s); // brutforce (s+i);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
z:byte;
begin
for z:=1 to 3 do perebor("","ABC",z);
end;
← →
Paul-M (2003-08-10 11:24) [9]Лови аналогию:
0123456789
abcdefghij
Если 0-9 это символы в системе счисления а вместо цифр ты ипользуешь буквы - то 10 это ba. Алгоритм перевода из десятичной системы счисления в 26-ричную аналогичен переводу из десятичной в двоичную.
Также перебираешь от 0 до бесконечности, только записываешь число буквами - вот и все комбинации
← →
SergP (2003-08-10 12:06) [10]
> Paul-M © (10.08.03 11:24)
> Лови аналогию:
> 0123456789
> abcdefghij
>
> Если 0-9 это символы в системе счисления а вместо цифр ты
> ипользуешь буквы - то 10 это ba. Алгоритм перевода из десятичной
> системы счисления в 26-ричную аналогичен переводу из десятичной
> в двоичную.
> Также перебираешь от 0 до бесконечности, только записываешь
> число буквами - вот и все комбинации
Только если в разных случаях используются разные наборы символов - то этотим методом будет очень трудно реализовать.
← →
nikus (2003-08-10 12:32) [11]Я делал так:
есть строка chars = "0123456789ABCDEFGI...."; в которой включены все буквы для перебора.
var
c, counter, len : integer;
s : string;
counter := 0;
repeat
inc(counter);
c := counter;
s := "";
while c <> 0 do
begin
j := c mod len;
if j = 0 then j := len;
s := chars[j] + s;
c := c div len;
if j = len then c := c - 1;
end;
Form1.Caption := s;
( s)Я делал так:
есть строка chars = "0123456789ABCDEFGI...."; в которой включены все буквы для перебора.
var
c, counter, len : integer;
s : string;
counter := 0;
repeat
inc(counter);
c := counter;
s := "";
while c <> 0 do
begin
j := c mod len;
if j = 0 then j := len;
s := chars[j] + s;
c := c div len;
if j = len then c := c - 1;
end;
Form1.Caption := s;
Application.ProcessMessages;
until length(s) > 5;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c