Zahlen-Zahlen-Zahlen

Michael Kliewe hatte vor einiger Zeit erneut zu einem Wettbewerb aufgerufen. Diesmal galt es die Zahlen von 1 bis 10.000 als Zahlworte auszugeben. Relativ schnell kamen dann auch die ersten Lösungen rein die binnen 10-30 Minuten geschrieben worden sind. Ich als reiner Hobby-PHP’ler kann da nicht mithalten, dennoch hatte mich das Thema gereizt.

Vor gut 20 Jahren hatte ich nämlich genau dieses Problem, Zahlen als Wort ausschreiben, mal auf einen Amiga in Basic umgesetzt. Wenn ich mich richtig erinnere, war der Grund dafür irgendwelche Scheckeinreichungen wo der Betrag jeweils ausgeschrieben werden musste. Ich dachte mir, wenn ich es damals geschafft hatte, dann wird es diesmal wohl kein Problem sein. Die ersten drei Anläufe gingen schief, so einfach ist das Thema dann nämlich doch nicht. Dies wird auch deutlich, wenn man sich mal die bei Michael Kliewe geposteten Lösungen anschaut. Nicht wenige der Lösungen patzen bei den vielen kleinen und großen Stolperfallen die diese Aufgabe beinhaltet. Es wird z.B. tatsächlich “siebzehn” und nicht “siebenzehn” geschrieben, genauso wie es “siebzig” und nicht “siebenzig” geschrieben wird. Dafür schreibt sich die 77 jedoch “sieben-und-siebzig”. Dagegen war die Problematik das die Zahlen 13-19 ohne “und”, die Zahlen ab 21 jedoch mit “und” geschrieben werden eher harmlos.

Ich hatte die Anzahl an Sonderfällen auch stark unterschätzt, weswegen Versuch 1 und 2 mal glatt in die Hose gingen. Versuch 3 scheiterte in der Umsetzung des angeblich vorhandenen Systems welches hinter der Zahlenbenennung stecken soll.
Mittlerweile war der Wettbewerb quasi gelaufen, es gab viele gute und schlechte Lösungen und obendrein gab es bereits eine Zusammenfassung. Viel neues hätte ich somit nicht zu den Wettbewerb beitragen können, weshalb ich mich dazu entschied den Wettbewerb Wettbewerb sein zu lassen und nur für mich an dem Problem rumzuprokeln.

Beim vierten Versuch startete ich also mit einem komplett anderen Ansatz. Zum einen wollte ich die Lösung möglichst flexibel gestalten, sie sollte sich ohne großen Aufwand auch an andere Sprachen anpassen lassen (daran arbeite ich übrigens noch). Zum anderen war mir das gesteckte Ziel von 10.000 nun zu wenig. Warum sich mit 10.000 begnügen wenn ich auch eine Fantastilliarde umsetzen kann?
Fantastilliarden gibt es zwar nicht, jedoch Oktilliarden. Eine Oktilliarde ist eine 1 gefolgt von 51 Nullen. 999 Oktilliaraden ist bei meiner Lösung die derzeit größtmögliche darstellbare Zahl, übrigens eine Zahl mit 54 Stellen. Noch größere Zahlen sind theoretisch möglich, man müsste lediglich die Zahlnamen erweitern. Die Grenze dürfte bei einer Zentilliarde erreicht sein, dies ist eine 1 gefolgt von 603 Nullen. Das ist wohl weniger eine technische Grenze, sondern ich habe bisher keine Zahlnamen für noch größere Zahlen gefunden.

Stand der Dinge ist derzeit der, dass ich eine Klasse habe die eine 54 stellige Zahl in ein Zahlwort umwandeln kann. Die Klasse ist in den für mich üblichen Pidgin-PHP geschrieben. Sprich: Nicht schön, funktioniert aber.
Da ich dieses Weblog unter anderem deswegen eingerichtet habe um irgendwann mal von diesem Pidgin-PHP weg zu kommen, ist diese Klasse quasi ein längerfristiges Projekt für mich an dem ich wachsen und neue Erkenntnisse gewinnen will. Die Klasse wird also in Zukunft noch das eine oder andere mal Erwähnung finden. Vor allem aber werde ich den Code der Klasse weiterhin ständig optimieren und verbessern. Falls jemand trotzdem schon mal einen Blick auf den Code werfen will, bitte in den Kommentaren melden. Bisher ist es mir nämlich noch völlig unklar wie ich hier halbwegs vernünftig Code posten kann. Wenn denn überhaupt.

Wenn ich mich bei tumblr ein wenig eingewöhnt habe, werde ich auch noch ein paar Worte dazu schreiben was es mit dem Blog usw. auf sich hat.

Keine Trackbacks

Ein Kommentar

  1. Hi Ralf,

    ich (bzw. wir) sind höchst interessiert an deiner Lösung! Es gibt kein Ende bis wann man Lösungen “einreichen” kann, es geht ja darum viele mögliche Lösungen zu sehen, etwas von den anderen zu lernen und an dieser Knobelaufgabe zu arbeiten.

    Interessant ist deine Erweiterung auf viel größere Zahlen, und die bald kommende Flexibilität für andere Sprachen, das hat bisher kein anderer veröffentlicht.

    Für den Code kannst du dir mal Gist bei Github anschauen, oder WordPress-Plugins wie z.B. “Syntaxhighlighter Evolved”:
    https://gist.github.com/
    http://wordpress.org/extend/plugins/syntaxhighlighter/

    Freue mich auf deinen Code
    Michael

    PS: Toller Blog, längere Beiträge die sehr angenehm zu lesen sind, freue mich auf weitere Artikel, weiter so!

    Veröffentlicht 7. Januar 2011 am 09:05 | Permalink