Mal wieder mehr Programmieren


Mein Project Euler Banner Eigentlich kommt mir jedes Jahr wieder die Erkenntnis, dass ich viel zu wenig programmiere. Und das ist echt schade, denn ich programmiere wirklich sehr gerne. Dies habe ich gerade letzte Woche wieder gemerkt, in der ich an dem Adressbuchprojekt für das Programmierpraktikum der Uni gearbeitet habe. Auch wenn es sehr stressig war, da wir zu spät angefangen haben, und Scheme auch nicht die Sprache meiner Wahl ist, hat es mir enormen Spaß gemacht.

Daher habe ich mich auf die Suche nach ein paar Programmierproblemen gemacht. Dabei bin ich unter anderem auf das Projekt Euler gestoßen, zu welchem ich mir überlegt habe, eine neue Blogserie zu starten.

Mein Project Euler Banner

Benannt nach dem Mathematiker Leonhard Euler (*15.04.1707 – †07.09.1783) beschäftigt sich das Euler Projekt mit mathematischen Problemen und deren algorithmischen Lösungen mithilfe eines Computers. D.h. es geht sowohl um das Verstehen und Lösen mathematischer Problemstellungen, als auch um das (elegante) beschreiben dieses Problems in einer Programmiersprache der eigenen Wahl.

Das ganze hat einen kleinen “Wettkampf”-Charakter. Zum Überprüfen, ob man einen Algorithmus korrekt implementiert hat, gibt es eine Testaufgabe, die diesen Algorithmus auf eine große Zahl anwendet. Das Ergebnis wird benötigt, um das Problem auf seinem Profil als Gelöst zu verbuchen. Außerdem bekommt man danach zutritt zu einem Forum, auf dem man seine Lösung vorstellen kann, und mit anderen Leuten über diese Diskutieren kann.

Um einen weiteren Anreiz zu bieten, gibt es Level, die jeder Benutzer erreichen kann. Ab dem dritten Level haben diese sogar Titel:

Level Titel Bedeutung
1 25-49 Probleme gelöst
2 50-99 Probleme gelöst
3 Novice 100-149 Probleme gelöst
4 Intermediate 150-199 Probleme gelöst
5 Expert 200-249 Probleme gelöst
6 Legend 250-299 Probleme gelöst
7 Veterans 300+ Probleme gelöst

Quelle.

Zur Zeit gibt es 324 Probleme, aber es werden laufend mehr. Außerdem lockt die Seite ein weltweites Publikum an. Zur Zeit gibt es 146.630 aktive Benutzer aus 199 Ländern, ein nicht unbedeutender Teil (zur Zeit 3.234 Benutzer) stammen dabei aus Deutschland. Insgesamt wurden zu den Problemen 2.395.469 richtige Antworten abgegeben, d.h. durchschnittlich löst jeder Benutzer ca. 16 Probleme. Weitere interessante Statistiken, wie die eingesetzte Sprache gibt es auf der Statistikseite.

Natürlich kann man sich darüber Streiten, ob eine Lösung nun sehr elegant ist oder nicht. Wichtig ist von Seiten des Projektes die “1-Minuten-Regel”. D.h. die Berechnung der Lösung eines Problems sollte immer unter einer Minute liegen!

Leider gibt es bei den alten Problemen nicht mehr die Möglichkeit, diese in dem Forum zu diskutieren. Und daher (und auch, um mich zu motivieren am Ball zu bleiben) habe ich vor, hier meine Lösungen vorzustellen. Nicht, um anderen Leuten den Spaß zu nehmen (daher lest meine Beiträge bitte nicht, wenn ihr die Probleme selbst lösen wollt), sondern um die Lösungen zu diskutieren.

Ich werde dabei höchstwahrscheinlich die Programmiersprache Scheme nutzen, da sie sich für mathematische Probleme besonders eignet. Aber vielleicht werde ich hier und da auch Smalltalk einsetzten, da ich schon lange nicht mehr in Smalltalk programmiert habe, und mir die Sprache immer sehr viel Spaß gemacht hat.

Für Scheme werde ich die Implementierung DrRacket nutzen, und hier den Dialekt “Die Macht der Abstraktion”, welche für den gleichnamigen Titel “Klaeren, Sperber: Die Macht der Abstraktion”. Das Buch orientiert sich dabei stark an dem (gerade international) sehr viel bekannteren Grundlagenwerk “Felleisen, Findler, Flatt, Krishnamurthi: How to Design Programs”. Allerdings bietet DMdA einige Konstrukte, welche HtdP nicht hat. Eine der wichtigsten ist die Möglichkeit, Signaturen zu definieren (Bei HtdP ist dies zwar auch ein integraler Bestandteil, allerdings geschieht dies dort lediglich in den Kommentaren, was dem Zweck einer Signatur nicht ganz gerecht wird).

Falls ich Smalltalk verwenden werde, wird hier die Implementierung Squeak zum Einsatz kommen, die zwar Anfangs sehr gewöhnungsbedürftig ist, allerdings eine wirklich schöne opensource Implementierung ist, die von Smalltalk erfinder und Begründer der Objektorientierung, Alan Kay federführend entwickelt wird.

Das erste Problem habe ich bereits gelöst, und hier wird es in Kürze einen Artikel dazu geben.

Advertisements

Please comment. I really enjoy your thoughts!

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s