string generation
4 отговора
159 прегледа
string generation
trqbva mi nqkakav algoritam/za predpochitane sas source/ za generirane na stringove.. primerno.. kazva mu se izpolzvai samo malki bukvi i toi pochva
a
b
c
d
..
aa
ab
ac
..
abcdef
...
hjepadfv
ili pak mu se kazva golemi malki bukvi i cifri i pochva da gi redi v sashtiq stil..
mislq che podobni algoritmi se izpolzvat pri bruteforce hackovete no.. na men mi trqbva za generirane na drugo neshto a ne znam otkade da namera takav bruteforcer s kod..
a
b
c
d
..
aa
ab
ac
..
abcdef
...
hjepadfv
ili pak mu se kazva golemi malki bukvi i cifri i pochva da gi redi v sashtiq stil..
mislq che podobni algoritmi se izpolzvat pri bruteforce hackovete no.. na men mi trqbva za generirane na drugo neshto a ne znam otkade da namera takav bruteforcer s kod..
Re: string generation
Mi mnoo lesno
var b,c,d,e:char;
begin
Randomize;
b:=random(128);
c:=random(128);
d:=random(128);
e:=random(128);
end;
i posle gi slepvash i si gotov ... si neznam tochno kak sa razpolojeni po ascii tablicata malki i golemi , no sam mojesh da vidish niakade <b>Tova e ot men</b>
var b,c,d,e:char;
begin
Randomize;
b:=random(128);
c:=random(128);
d:=random(128);
e:=random(128);
end;
i posle gi slepvash i si gotov ... si neznam tochno kak sa razpolojeni po ascii tablicata malki i golemi , no sam mojesh da vidish niakade <b>Tova e ot men</b>
Re: string generation
Първото което ми идва на ум (макар и малко болен в момента ;-))) е да поразгледаш бройни системи (това може би е малко отдалечено на пръв поглед), но реално твоя стринг може да се представи като число от N тична бройна система - само трябва да си определиш броя на елементите - и на кой елемент коя буква да съответства.
т.е. представи си го нещо от сорта (по - долу)- само че тук е ограничено от десетичната система - което можеш да премахне като ползваш N- тична такава - където N e боря на буквите + цифрите (като можеш да изполваш и специална подредба - примерно главните да са след малките или обратно)
1 - а
2 - б
....
11 - аа
12 - аб
...
1111111 - ааааааа
Реално ти трябва един боряч от 0 ... до където решиш и една функция която преобразува това число от 10 -тична в N -тична система - много е просто, ама ме мързи да го разписвам - във вси4ки учебници го има.
---
Е т'ва е живот!
т.е. представи си го нещо от сорта (по - долу)- само че тук е ограничено от десетичната система - което можеш да премахне като ползваш N- тична такава - където N e боря на буквите + цифрите (като можеш да изполваш и специална подредба - примерно главните да са след малките или обратно)
1 - а
2 - б
....
11 - аа
12 - аб
...
1111111 - ааааааа
Реално ти трябва един боряч от 0 ... до където решиш и една функция която преобразува това число от 10 -тична в N -тична система - много е просто, ама ме мързи да го разписвам - във вси4ки учебници го има.
---
Е т'ва е живот!
Re: string generation
program bfmi;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
xleters:string='ABCDEFGH';
lastletter='H'; //speed optimization issue
function GenNext (s:String):string;
var
x:integer;
begin
if s='' then begin
result:=xleters[1];
exit;
end;
Result:=s;
for x:=length(Result) downto 1 do begin
if Result[x]=lastletter then begin
Result[x]:=xleters[1];
end else begin
Result[x]:=xleters[pos(Result[x],xleters)+1];
exit;
end;
end;
Result:=xleters[1]+Result;
end;
var
x:integer;
s:String;
begin
s:=GenNext('');
for x:=1 to 20 do begin
Writeln (s);
s:=GenNext (s);
end;
readln;
end.
------------------------------
I got a COMPILER, and I'm not afraid to use it!
Редактирано от SDR на
Re: string generation = JIN
The Wizard PIE JIN
var
Form1: TForm1;
Xn: byte = 65; //A
Xk: byte = 90; //Z
implementation
{$R *.DFM}
function NextLeter(S: string): string;
var
i: integer;
begin
if S = '' then begin Result := chr(Xn); exit; end;
for i := 1 to length(S) do
begin
if ord(S) < Xk then begin
S := chr(ord(S) + 1);
Result := S;
exit;
end else begin
S := chr(Xn);
Result := S;
end;
result := Result + chr(Xn);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text := NextLeter(edit1.Text);
end;
var
Form1: TForm1;
Xn: byte = 65; //A
Xk: byte = 90; //Z
implementation
{$R *.DFM}
function NextLeter(S: string): string;
var
i: integer;
begin
if S = '' then begin Result := chr(Xn); exit; end;
for i := 1 to length(S) do
begin
if ord(S) < Xk then begin
S := chr(ord(S) + 1);
Result := S;
exit;
end else begin
S := chr(Xn);
Result := S;
end;
result := Result + chr(Xn);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text := NextLeter(edit1.Text);
end;