Position eines Wortes in alphabetischer Abfolge

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Position eines Wortes in alphabetischer Abfolge

    Hallo,
    Ich bräuchte bei Folgendem eure Hilfe. Ich möchte die Position eines Wortes rausfinden, wenn ich mit a beginne und dies den Startwert 1 hat dann soll aa Nummer 27 sein und z.B. php 11040. Ich habs schon mit einer for-Schleife und Modulo sowie Multiplikation versucht, bisher sind aber immer Werte unter dem Sollwert rausgekommen. Schonmal THX fürs Posten eurer Formeln .

    Beispiel:
    PHP-Code:
    11035 phk
    11036 phl
    11037 phm
    11038 phn
    11039 pho
    11040 php
    11041 phq
    11042 phr
    11043 phs
    11044 pht 

  • #2
    Ist doch einfachstes Mathe. Du hast N mögliche Zeichen im Alphabet. Um an den Wert eines Zeichens x zu kommen, verwendest du den Index xi des Zeichens im Alphabet multipliziert mit der Anzahl der Zeichen im Alphabet potenziert mit der Position p des Zeichens (0-basiert) im Eingabestring. Heißt im Klartext, du hast folgende Formel:
    Code:
    w(x) = xi*N^p
    Das mal konkret für dein Beispiel "php":

    1. Zeichen:
    Code:
    N=26
    x="p" => xi=16
    p=0
    => w("p") = 16*26^0 = 16
    Für die anderen beiden Zeichen analog.

    Der Gesamtwert des Strings ergibt sich dann einfach als die Summe der Einzelwerte:
    Code:
    16*26^0 + 8*26^1 + 16*26^2 = [u]11040[/u]

    So, jetzt nur noch in Quellcode drücken und du hast's
    Btw: Lösung bitte hier posten.

    Kommentar


    • #3
      Was mir aufgefallen ist, wenn der erste und der dritte Buchstabe identisch sind, dann wird das Ergebnis richtig ausgegeben, andernfalls kommt das mit der Formel nicht hin.

      *edit*
      Wozu gibts strrev()

      PHP-Code:
      function alpha_position($input)
      {
          
      $input  strrev($input);
          
      $strlen strlen($input);
          
      $sum    0;

          for(
      $i 0$i $strlen; ++$i)
          {
              
      //Beginn Ascii Klein-A bei 97, daher -96 um a Startwert 1 zuzuteilen
              
      $sum += (ord($input[$i]) - 96) * bcpow('26''' $i '');
          }

          return 
      $sum;

      Zuletzt geändert von OneWayUserAcci; 09.01.2009, 18:22.

      Kommentar


      • #4
        Sorry, die Position ist wie im Zehnersystem von hinten gezählt, dann passt es. Also entweder strrev oder strlen-pos, wobei ein kurzer Test die schnellere Lösung findet.

        Kommentar

        Lädt...
        X