Diese Funktion hab ich vor längerer Zeit mal geschrieben.
Ich glaube man könnte da noch einiges optimieren:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79:
| var BArray: Array[97..121] of String;
function GenerateWords(Last: String): String; var Laenge, Zahl: Integer; Schleife, Minus: Integer; NBuch, LBuch: String; begin Result := ''; Laenge := Length(Last)-1; LBuch := Copy(Last, Laenge+1, 1); Zahl := 0; Minus := 1;
for Schleife := 97 to 121 do begin if BArray[Schleife] = LBuch then begin Zahl := Schleife; Break; end; end;
if (Zahl = 0) AND (Copy(Last, 1, 1) <> 'z') then begin LBuch := Copy(Last, Laenge, 1);
for Schleife := 97 to 121 do begin if BArray[Schleife] = LBuch then begin Zahl := Schleife; Break; end; end;
while Zahl = 0 do begin LBuch := Copy(Last, Laenge-Minus, 1);
for Schleife := 97 to 121 do begin if BArray[Schleife] = LBuch then begin Zahl := Schleife; Break; end; end;
inc(Minus); end;
NBuch := Chr(Zahl+1);
for Schleife := 1 to Minus do NBuch := NBuch + 'a'; Result := Copy(Last, 0, Laenge-Minus) + NBuch; end else begin NBuch := Chr(Zahl+1);
if (Copy(Last, 0, 1) = 'z') AND (Zahl = 0) then begin NBuch := 'a';
for Schleife := 1 to Laenge+1 do NBuch := NBuch + 'a';
Result := NBuch; end else Result := Copy(Last, 0, Laenge) + NBuch; end; end; |
Außerdem wäre es gut, wenn es noch eine Möglichkeit für einen Start/End-Buchstaben gibt.
Sprich: Es sollen nur Wörter generiert werden die mit V anfangen und vielleicht mit L enden.
Eine weitere Möglichkeit wäre dann nur Wörter zu generieren, die es geben kann.
Sprich: Vermeiden von Vv oder Xz.
Was würdet ihr an der Funktion anders machen? Ich denk die muss vielleicht komplett neu
aufgebaut werden, da sie so auch ziemlich unübersichtlich ist. Ich hab ne Weile gebraucht
um alle Fehler rauszubekommen, weil man ja nicht gleich weiß wo der Fehler ist.
Man könnte ja gleich ein Array mit den Buchstaben von A - Z erstellen. So muss nicht immer
Chr() aufgerufen werden, was vielleicht Zeit kostet und woran wieder die Übersichtlichkeit leidet.
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)