Lude: Zeichenkette um jedes zweite Zeichen verkuerzen

Hi,

gegeben ist eine Zeichenkette der Laenge 'n'. Aus dieser entfernt werden soll jedes zweite Zeichen, beginnend mit dem ersten. - Wie geht's am performatesten?

Gruss,
Lude

  1. Halihallo Lude

    gegeben ist eine Zeichenkette der Laenge 'n'. Aus dieser entfernt werden soll jedes zweite Zeichen, beginnend mit dem ersten. - Wie geht's am performatesten?

    Hm. Da Perl per se aufgrund der Architektur (4GL Language mit VM)
    langsamer ist, als äquivalente C-Programme, könnte ich mir
    vorstellen, dass ein möglichst C Backend am schnellsten ist. Die
    per standard mitgelieferte Möglichkeit bietet hierbei die
    RegularExpression Engine:

    my $t = '.....';   # langer String
    $t =~ s/(.)(.)/$1/g;
    print $t;

    oder

    my $t = '.....';
    print join('', split(/(.)./,$t));

    ansonsten könnte ich mir noch etwas per grep/map vorstellen, was
    aber IMHO langsamer sein wird. Das IMHO langsamste wäre eine
    for/while-Schleife mit einem Modulo-Test auf die Schleifenvariable,
    oder allgemein: die Verwendung von substr().

    Viele Grüsse

    Philipp

    1. Halihallo Lude

      Ich vergass: teste einfach einige Varianten mittels
      perldoc Benchmark

      Viele Grüsse

      Philipp

    2. Hallo Philipp,

      hm, da hast du ja auch schon gepostet ;)

      $t =~ s/(.)(.)/$1/g;

      Durch die zweite Backref wird der Ausdruck unnötig langsamer.

      Grüße,
       CK

      --
      Wenn auf Erden alle das Schoene als schoen erkennen, so ist dadurch schon das Haessliche bestimmt.
      1. Halihallo Christian

        hm, da hast du ja auch schon gepostet ;)

        Deine Lösung ist korrekter ;)

        $t =~ s/(.)(.)/$1/g;
        Durch die zweite Backref wird der Ausdruck unnötig langsamer.

        Richtig, genau das kommt eben von dem drei-Minuten-weniger-lang-
        Nachdenken ;)

        Viele Grüsse

        Philipp

  2. Hallo Lude,

    gegeben ist eine Zeichenkette der Laenge 'n'. Aus dieser entfernt
    werden soll jedes zweite Zeichen, beginnend mit dem ersten. - Wie geht's
    am performatesten?

    my $x = "ab" x 100;
    $x =~ s/(.)./$1/g;

    Grüße,
     CK

    --
    Nichts zu begehren, das ist der Weg.
    1. hi CK,

      gegeben ist eine Zeichenkette der Laenge 'n'. Aus dieser entfernt
      werden soll jedes zweite Zeichen, beginnend mit dem ersten. - Wie geht's
      am performatesten?

      my $x = "ab" x 100;
      $x =~ s/(.)./$1/g;

      Coole Mucke!

      Gruss, Erwin

      --
      SELFforum - Das Tor zur Welt!
      Theoretiker: Wie kommt das Kupfer in die Leitung?
      Praktiker: Wie kommt der Strom in die Leitung?