Note that there are some explanatory texts on larger screens.

plurals
  1. POSlow Anagram Algorithm
    text
    copied!<p>I have been working on an algorithm to rearranging the letters of a word, but it takes much time to find the correct word.</p> <pre><code>var Form1: TForm1; DictionaryArray : array[0..2000] of string; const Numbrs : string = '123456789'; implementation {$R *.dfm} function GenerateSequence(CPoint : String; L : Integer): String; var Increaser : array[1..8] of Integer; i : Integer; AnagramSequence : String; begin FillChar(Increaser, SizeOf(Increaser), 0); for i := 1 to Length(CPoint) do Increaser[9 - i] := StrToInt(CPoint[L + 1 - i]); //==========================================// if Increaser[8] &lt;= L then Increaser[8] := Increaser[8] + 1; if Increaser[8] &gt; L then begin Increaser[8] := 1; Increaser[7] := Increaser[7] + 1; end; if (Increaser[7] &gt; L - 1) and (L &gt; 3) then begin Increaser[8] := 1; Increaser[7] := 1; Increaser[6] := Increaser[6] + 1; end; if (Increaser[6] &gt; L - 2) and (L &gt; 4) then begin Increaser[8] := 1; Increaser[7] := 1; Increaser[6] := 1; Increaser[5] := Increaser[5] + 1; end; if (Increaser[5] &gt; L - 3) and (L &gt; 5) then begin Increaser[8] := 1; Increaser[7] := 1; Increaser[6] := 1; Increaser[5] := 1; Increaser[4] := Increaser[4] + 1; end; if (Increaser[4] &gt; L - 4) and (L &gt; 6) then begin Increaser[8] := 1; Increaser[7] := 1; Increaser[6] := 1; Increaser[5] := 1; Increaser[4] := 1; Increaser[3] := Increaser[3] + 1; end; if (Increaser[3] &gt; L - 5) and (L &gt; 7) then begin Increaser[8] := 1; Increaser[7] := 1; Increaser[6] := 1; Increaser[5] := 1; Increaser[4] := 1; Increaser[3] := 1; Increaser[2] := Increaser[2] + 1; end; //==========================================// AnagramSequence := IntToStr(Increaser[1]) + IntToStr(Increaser[2]) + IntToStr(Increaser[3]) + IntToStr(Increaser[4]) + IntToStr(Increaser[5]) + IntToStr(Increaser[6]) + IntToStr(Increaser[7]) + IntToStr(Increaser[8]); Result := AnsiReplaceStr(AnagramSequence, '0', '') end; procedure LoadDictionary(DictionaryPath : String); var F : TextFile; i : Integer; begin i := 0; AssignFile(F, DictionaryPath); Reset(F); while not Eof(F) do begin Readln(F, DictionaryArray[i]); Inc(i); end; CloseFile(F); end; function CheckInDictionary(RandedWord : String): Boolean; begin if (AnsiIndexText(RandedWord, DictionaryArray) = -1) then Result := False else Result := True; end; procedure TForm1.FormCreate(Sender: TObject); begin LoadDictionary('wordlist.txt'); Label1.Caption := 'Dictionary: Loaded.'; Label1.Font.Color := clGreen; end; procedure TForm1.Button1Click(Sender: TObject); var FRand, MRand, RandedWord, AnagramSequence : String; RandedIndex, i : Integer; begin FRand := Edit1.Text; MRand := FRand; RandedWord := MRand; AnagramSequence := StringOfChar('1', Length(FRand)); while CheckInDictionary(RandedWord) = False do begin MRand := FRand; RandedWord := ''; AnagramSequence := GenerateSequence(AnagramSequence, Length(FRand)); for i := Length(AnagramSequence) downto 1 do begin Application.ProcessMessages; RandedIndex := StrToInt(AnagramSequence[i]); RandedWord := RandedWord + MRand[RandedIndex]; Delete(MRand, RandedIndex, 1); end; end; Edit2.Text := RandedWord; end; </code></pre> <p>How can i improve this algorithm?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload