Harry: Inkrementieren bei Buchstaben

Beitrag lesen

Holladiewaldfee,

Du könntest z.B. ein Array der Art

$a = array('a', 'b', ...);

anlegen. Zunächst zerlegst Du Deinen String in Zahlentupel in Z_26 (Z_26 ist der Ring der Zahlen 0 bis 25) - das machst Du mit array_search (http://de3.php.net/array-search). Am besten packst Du das Ergebnis auch in ein Array. Dann brichst Du die zu addierende Zahl mit ein paar Modulooperationen soweit auf, daß Du sie nach Potenzen von 26 geordnet hast:

z = a*26^0 + b*26^1 + c*26^2 + ...

Den Startwert (=höchsten Wert) für die Potenzen bekommst Du aus der 26ten Wurzel der Zahl (nach unten gerundet).

Jetzt addierst Du a auf den letzten Buchstaben, d.h. die letzte Zahl drauf. Wenn Du Dir eine Funktion zur Zahlenbehandlung in Z_26 schreibst, mußt Du den neuen Wert der Zahl zurückgeben. Nun mußt Du vergleichen, ob die neue Zahl >=0 und <=alte Zahl ist. Ist sie das, mußt Du b inkrementieren, ist sie es nicht, gehst Du direkt zu b über. Nun machst Du mit b und dem vorletzten "Buchstaben" genau das gleiche Spielchen, dann mit c usw.

Wenn Du schließlich die neuen Werte für die Buchstaben hast bastelst Du Dir mit Hilfe des Arrays $a den neuen String zusammen. Fertig. Ganz einfach ;-)

Allerdings habe ich so das Gefühl, daß Deine "simple" Lösung bis hin zu Faktoren jenseits von 10^6 deutlich performanter ist. Danach dürfte meine Funktion so langsam aber sicher aufholen und schließlich überholen. Bei richtig großen Zahlen rennt Deine dann irgendwann ins Timeout. Meine hoffentlich nicht so schnell. Schätze mal, das war nicht das, was Du hören wolltest, oder?

Ciao,

Harry

--
  Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
  Bis dahin:
  Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel