AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi CaseCorrection d. Permutataion / BruteForce d. 2. Dimension
Thema durchsuchen
Ansicht
Themen-Optionen

CaseCorrection d. Permutataion / BruteForce d. 2. Dimension

Ein Thema von Harry M. · begonnen am 29. Jun 2007 · letzter Beitrag vom 29. Jun 2007
Antwort Antwort
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#1

CaseCorrection d. Permutataion / BruteForce d. 2. Dimension

  Alt 29. Jun 2007, 18:07
Hallöchen ich bins wieder

Ich versuche alle Möglichkeiten von %s zu finden. Aber nich wie gewöhlich a..z sondern a..A

Mein ungefährer Ansatz:
Ich nehme an der "Mod" Operator "verrechnet" im wahrsten Sinne de Worts die 2. Spalte aus der Beispiel Matix.
Oder wie seht Ihr das?

Delphi-Quellcode:
program Demo;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function CaseCorrection(var AStr: String; ACharToCase: Integer): String;
var
  S: String;
  X: Integer;
begin
  if ACharToCase > Length(AStr) then
    ACharToCase := ACharToCase mod Length(Astr);

  S := AStr[ACharToCase];
  if S = LowerCase(S) then
    S := UpperCase(S)
    else
    S := LowerCase(S);

  Insert(S, AStr, ACharToCase);
  Delete(AStr, ACharToCase+1, 1);
  Result := Trim(AStr);
end;

const
  StrToCorrection = 'ABC';
  // aBC, abC, abc
  // AbC, Abc, aBc
  // AbC, ABc, ABC
var
  S: String;
  I, iCount: Integer;
begin
  S := StrToCorrection;
  iCount := Length(StrToCorrection) * Length(StrToCorrection);

  for I := 1 to iCount do
    writeln( CaseCorrection(S, I) );

  readln;
end.
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: CaseCorrection d. Permutataion / BruteForce d. 2. Dimens

  Alt 29. Jun 2007, 18:26
Zitat von Harry M.:
Ich nehme an der "Mod" Operator "verrechnet" im wahrsten Sinne de Worts die 2. Spalte aus der Beispiel Matix.
Der Operator mod liefert Werte zwischen 0 und Length(Astr)-1, du brauchst aber Werte zwischen 1 und Length(Astr).

Also:
Delphi-Quellcode:
  if ACharToCase > Length(AStr) then
    ACharToCase := 1 + (ACharToCase - 1) mod Length(Astr);
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#3

Re: CaseCorrection d. Permutataion / BruteForce d. 2. Dimens

  Alt 29. Jun 2007, 18:34
Nach dem 6. Durchgang beginnen wiederholungen

aBC <-
abC
abc
Abc
ABc
ABC
aBC <-
abC
abc
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: CaseCorrection d. Permutataion / BruteForce d. 2. Dimens

  Alt 29. Jun 2007, 18:35
Hallo Harry,

ein Wort mit drei Buchstaben hat mitnichten 9 (3 * 3) Variationen:

Delphi-Quellcode:
uses
  StrUtils;

procedure VariateCase(s: string; sl: TStrings);
var
  i, n: Integer;
begin
  sl.BeginUpdate;
  sl.Clear;
  for n := 0 to Pred(1 shl Length(s)) do
  begin
    for i := Length(s) downto 1 do
      s[i] := IfThen(Odd(n shr Pred(i)), AnsiUpperCase(s[i]), AnsiLowerCase(s[i]))[1];
    sl.Add(s);
  end;
  sl.EndUpdate;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#5

Re: CaseCorrection d. Permutataion / BruteForce d. 2. Dimens

  Alt 29. Jun 2007, 18:50
Hallo marabu,

Das sieht schon mal nicht schlecht aus. Nur Zahlen funzen irgenwie nicht.
"Mitnichten" wie muss ich das verstehen. Wären es nun 3² oder 2³. 3 Zeichen x Ihre Grossbuchstaben.
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: CaseCorrection d. Permutataion / BruteForce d. 2. Dimens

  Alt 29. Jun 2007, 18:55
Hallo Harry,

natürlich sind es nicht 3 * 3 Möglichkeiten, sondern 2 * 2 * 2.

Wenn das Wort auch Zeichen enthält, bei denen Uppercase(char) = Lowercase(char) ist, dann müsste ich an meinem Code zwei kleine Änderungen machen.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#7

Re: CaseCorrection d. Permutataion / BruteForce d. 2. Dimens

  Alt 29. Jun 2007, 19:33
Ich nehme an eine dieser Änderungen wären ungefähr so:
 IfThen(Odd(n shl i), s[i], s[Pred(i)])[1] Geht das in die richtige Richtung?
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: CaseCorrection d. Permutataion / BruteForce d. 2. Dimens

  Alt 29. Jun 2007, 19:53
Haarscharf daneben:

Delphi-Quellcode:
procedure VariateCase(s: string; sl: TStrings);
const
  LETTERS: set of Char = ['a'..'z','A'..'Z', 'ä', 'Ä', 'ö', 'Ö', 'ü', 'Ü'];
var
  i, skip, n, len: Integer;
begin
  len := 0;
  for i := 1 to Length(s) do
    Inc(len, Ord(s[i] in LETTERS));
  sl.BeginUpdate;
  sl.Clear;
  for n := 0 to Pred(1 shl len) do
  begin
    skip := 0;
    for i := 1 to len do
    begin
      while not (s[i + skip] in LETTERS) do
        Inc(skip);
      s[i + Skip] := IfThen(Odd(n shr Pred(i)), AnsiUpperCase(s[i + skip]), AnsiLowerCase(s[i + skip]))[1];
    end;
    sl.Add(s);
  end;
  sl.EndUpdate;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#9

Re: CaseCorrection d. Permutataion / BruteForce d. 2. Dimens

  Alt 29. Jun 2007, 20:33
Hm...Sieht irgenwie genial aus Sei Dir gedankt.

Ich versteh max die Hälfte. Aber ich werd mir das noch oft genug ansehen.
Villeicht kannst Du mir das nich mit ein paar Worten erklären.
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: CaseCorrection d. Permutataion / BruteForce d. 2. Dimens

  Alt 29. Jun 2007, 21:26
Hallo Harry,

die Idee hinter meinem Code ist einfach: Ein Wort mit n Buchstaben kann ordnungserhaltend (Position der Zeichen darf nicht verändert werden) auf zwei (Zahl der Freiheitsgrade, Upper- oder Lowercase) hoch n (Zahl der Buchstaben) verschiedene Arten geschrieben werden. Wenn ich die Buchstabenpositionen als die Stellen einer Dualzahl betrachte und festlege, dass für jedes 1-Bit ein Großbuchstabe und für jedes 0-Bit ein Kleinbuchstabe gesetzt wird, dann sollte mein Code aus Beitrag #4 verständlich sein. Die Prozedur hat einen String als Eingabeparameter und eine StringList als Ausgabeparameter. Für den Fall, dass die StringList Teil einer visuellen Komponente ist, wird noch die Aktualisierung während der Schleifendurchläufe unterdrückt.

Für Wörter mit Zeichen, deren Schreibweise nicht variiert, sind genau zwei Änderungen nötig gewesen: Die Bestimmung von n ist nicht mehr einfach die Länge des Wortes - Zeichen mit invarianter Schreibweise dürfen nicht mitgezählt werden. Deshalb die Längenberechnung zu Beginn des Codes in Beitrag #8. In der Schleife müssen genau die invarianten Zeichen übersprungen werden, deshalb der berechnete Index (i + skip).

Gute Nacht
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz