Projekt Euler ist eine Webseite, auf der Problemstellungen aus dem Bereich der Mathematik und der Informatik zu finden sind. Einige Probleme kann man mit Papier und Bleistift angehen, die meisten aber erfordern einen cleveren Algorithmus und etwas Übung in einer Programmiersprache.
Die 25 Probleme der ersten Stufe sind noch relativ leicht zu lösen. Schwieriger wird es ab Stufe zwei. Bis dahin hat man allerdings schon so viel Spaß am Knobeln gehabt, so dass man nicht mehr aufhören möchte. An manchen Problemen kann man mehrere Tage sitzen, andere löst man in wenigen Minuten. Ein handelsüblicher Computer sollte die jeweilige Lösung innerhalb einer Minute ermittelt haben, vorausgesetzt, man hat einen zweckmäßigen Ansatz gewählt.
Wenn man eine pfiffige Lösung zu einem besonders kniffligen Problem gefunden hat, ist es üblich, den eigenen Lösungsweg zu erläutern. Dabei zeigt sich oft, dass ein guter Algorithmus in einer vermeintlich langsamen Sprache die Lösung schneller liefern kann, als ein mittelmäßiger in Java.
Smalltalk als Sprache der Wahl ist beim Projekt Euler bereits vertreten. Um aber einen Blick für das richtige Verhältnis zu bekommen verweise ich auf folgende Statistik.
Es gibt 11500 Python- und 7500 Javaprogrammierer beim Projekt Euler. Dem stehen etwa 60 Smalltalker gegenüber. Der bislang erfolgreichste konnte von den über 300 Aufgaben etwa 160 lösen. Tendenz steigend.
An dieser Stelle möchten wir Lösungen für ausgewählte Eulerprobleme vorstellen und unter dem Gesichtspunkt Geschwindigkeit, Speicherverbrauch, Lesbarkeit und Erweiterbarkeit diskutieren.
Dazu richten wir uns nach der von Kent Beck aufgestellten Direktive:
Make it work, make it right, make it fast.
Das heisst, zuerst suchen wir nach der einfachsten oder der am einfachsten zu implementierenden Lösung, die das richtige Ergebnis liefert. Ist sie schnell genug und für Außenstehende leicht verständlich, können wir es dabei belassen.
It works!
Oft bietet es sich aber an, den Code kompakter, schöner und lesbarer zu schreiben.
Well done!
Zuletzt schauen wir nach Optimierungsmöglichkeiten, indem wir das eigentliche Problem an andere Größenordnungen anpassen.
Lightspeed!