Aller Anfang ist schwer. Auch beim Erlernen von Programmiersprachen. Zwar gibt es meist viele Anleitungen im Internet und auch reichlich Bücher, die einem Schritt für Schritt erklären wie’s funktioniert, aber einfach nur abtippen reicht irgendwann nicht mehr. Dann steht man schnell vor der Frage “Was soll ich jetzt programmieren?” Der eine oder andere lernt eine Programmiersprache vielleicht nur deshalb, weil er gerne eine ganz bestimmte Aufgabe mit dem fertigen Programm erledigen möchte. Aber bis dahin kann es ein langer Weg sein. Und die ersten Programme sind mit Sicherheit weder die effizientesten, noch sind sie gut strukturiert. Jedenfalls, sofern man nicht bereits eine andere Programmiersprache beherrscht.
Man erreicht beim Lernen von Programmiersprachen schnell einen Punkt, an dem man sich denkt “Was soll ich bloß als Übung programmieren?”. Und genau da kommt Project Euler ins Spiel.
Das ist eine Webseite mit über 400 mathematischen Problemen, die es zu lösen gilt. Die Aufgaben variieren stark in ihrer Komplexität und behandeln die verschiedensten Themen. Mal geht es um Brüche, mal um Primzahlen, Fibonacci Zahlen etc. pp. Einige Aufgaben verbinden verschiedene Themen, andere knüpfen aneinander an. Aber alle sind so gestaltet, dass sie von Normalsterblichen nur mit Hilfe eines Computers gelöst werden können, sofern man nicht Stunden oder Tage mit den Berechnungen beschäftigt sein will.
Viele (wenn nicht sogar alle) der Aufgaben lassen sich mit Brute Force Methoden lösen, wobei man alle Möglichkeiten durchprobiert, bis man die Lösung gefunden hat. Allerdings sind die Aufgaben so gestellt, dass sie mit einem geeigneten Algorithmus in weniger als einer Minute von einem durchschnittlichen Computer gelöst werden können.
Das ist manchmal gar nicht so einfach, wenn einem – wie mir – das Verständnis für komplexe mathematische Probleme (insbesondere aus dem Bereich der Zahlentheorie) fehlt. Also löse ich viele Aufgaben mit Brute Force und hoffe, dass mein Computer keine halbe Stunde rechnen muss.
Ich habe letztes Jahr ein paar der Probleme mit Python gelöst und bin vor Kurzem dazu übergegangen, weitere Probleme mit Java zu lösen. Meinen aktuellen Fortschritt könnt ihr rechts unten verfolgen.
Problem 1
Multiples of 3 and 5
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
Zu deutsch:
Vielfache von 3 und 5
Wenn wir alle natürlichen Zahlen unter 10 auflisten, die Vielfache von 3 und 5 sind, bekommen wir 3, 5, 6 und 9. Die Summe dieser Vielfachen ist 23.
Finde die Summe aller Vielfachen von 3 oder 5 unter 1000.
Das ist – wie ich finde – die leichteste der Aufgaben, die ich mir bisher angesehen habe.
Hier meine Lösung in Python:
Und hier meine Lösung in Java:
Das Ergebnis lautet 233168 und es dauert 0 ms zu berechnen.
Ich werde in nächster Zeit weitere meiner Lösungen präsentieren, aber nicht alle, da ich mir für einige etwas Hilfe gesucht habe, da ich partout nicht auf den richtigen Algorithmus gekommen bin, oder die Aufgabe einfach missverstanden habe.




