Markus Banach: perl Kreuzwortraetsel

Veehrte Forumsleser,

ich sitze vor einem (fuer mich) kniffligen Perl Problem.
Ich habe ein array mit String Werten.

Wenn $array[x] == $array[x-1] dann sollen beide Elemente der Liste als Identifikation die gleiche Zahl erhalten.

Beispiel :
$array[0] == "bernd" und $array[1] == $array[0], dann sollen
$array[0] und $array[1]  "1 bernd" als neuen Wert erhalten. Mit
der 1 als Identifikation.

$array[x+1] soll jetzt mit $array[x]  verglichen werden.
Wenn $array[x+1] == $array[x]  dann wie oben beschrieben.
Wenn $array[x+1] != $array[x], dann soll fuer $array[x+1] die
Identifikation um 1 erhoet werden (Identifikation++;) .

$array[x+2] soll jetzt mit $array[x+1] verglichen werden  ...

Am Ende sollen alle Elemente des Feldes die direkt aufeinander folgen und den gleichen Wert haben auch die gleiche Identifikation besitzen.

Ich bedanke mich fuer Ihre Aufmerksamkeit !

Markus Banach

  1. Hi,

    dieses Problem solltest Du vielleicht mit zwei verschiedenen Arrays lösen; eines enthält die Begriffe, das andere die zugehörigen Werte. Andernfalls müßtest Du mit ziemlich kniffeligen split-Konstrukten arbeiten, was sowohl problemanfällig als auch speicher- und zeitaufwendig ist. Mit diesem Ansatz solltest Du eigentlich selbst zur Lösung kommen; ich möchte hier nur noch mal auf ein paar mögliche Fehlerquellen eingehen:

    Wenn $array[x] == $array[x-1] dann sollen beide Elemente der Liste als Identifikation die gleiche Zahl erhalten.

    $array[x] - das "x" ist wahrscheinlich hier nur ein Platzhalter, aber falls nicht: "$x" macht sich an der Stelle besser.

    Beispiel :
    $array[0] == "bernd" und $array[1] == $array[0], dann sollen

    $array[0] = 0;
    print "Ja!" if ($array[0] == "bernd");
    => Ja!

    Zum Vergleich von Strings mußt Du eq statt ==, ne statt !=, lt statt <, gt statt >, le statt <= und ge statt >= benutzen. Andernfalls werden die Werte als Zahl interpretiert.

    Ich hoffe, das hilft!

    Cheatah