Programmierwettbewerbe bei Infinite Search Space

Update August 2013/April 2014: So wie es aussieht, gibt es die Seite nicht mehr.

Vor einer Weile habe ich über die „Al Zimmermann’s Programming Contests“ geschrieben, bei denen jeder Interessierte möglichst gute Lösungen zu einer bestimmten Aufgabe eingeben konnte – es war im Prinzip völlig egal wie man auf die Lösungen kam, in der Praxis war es allerdings ohne Computer unmöglich, brauchbare Ergebnisse zu erzielen. Nachdem die Website dieses Wettbewerbs seit geraumer Zeit nur noch Fehlermeldungen liefert, bin ich neulich in einem Blog auf eine neue Website gestoßen, die einen Wettbewerb nach dem gleichen Muster durchführt: Infinite Search Space.

Prinzip

Ein Wettbewerb besteht aus einer Reihe von sehr ähnlichen Problemen (die sich zum Beispiel nur durch einen gegebenen ganzzahligen Wert unterscheiden). Für jede Teilaufgabe kann man eine Lösung eingeben (und auch jederzeit eine bessere nachreichen). Der Wettbewerb ist so konstruiert, dass sich die Lösung relativ einfach überprüfen und bewerten lässt. Für jede Teilaufgabe bekommt derjenige, der die beste Lösung gefunden hat, einen Punkt und diejenigen, die eine weniger gute Lösung haben, entsprechend Teilpunkte. Man kann jederzeit seinen eigenen Punktestand für die Teilaufgaben einsehen, außerdem wird noch die Gesamtpunktzahl ermittelt und danach ein Ranking aller Teilnehmer erstellt, das man ebenfalls einsehen kann.

Im Gegensatz zu den „Al Zimmermann’s Programming Contests“ gibt es bei diesem Wettbewerb (bisher) allerdings nicht viel zu gewinnen.

Der aktuelle Wettbewerb „Orchard Planting“

Zurzeit befasst sich der Wettbewerb mit einer Variante des „Orchard-planting problem“ (beschrieben unter anderem in der englischen Wikipedia) mit vier Bäumen pro Reihe: Es geht hierbei darum auf einer Ebene (Obstgarten, engl. „Orchard“) n Punkte (Bäume) so unterzubringen, dass es möglichst viele Geraden gibt, auf denen sich genau vier Bäume befinden, aber auf keiner Gerade mehr als vier Bäume liegen.

Auf der Website muss dabei für jedes der 50 Teilprobleme (das heißt für jede Anzahl Bäume n von 11 bis 60) eine Liste mit den (ganzzahligen) Koordinaten der Bäume im Garten abgegeben werden, und die Website ermittelt selbst, ob die Lösung gültig ist und wie viele Geraden mit vier Bäumen es darin gibt. Nach der Anzahl der Geraden mit vier Bäumen bemisst sich dann auch die Punktzahl für das Teilproblem: Wenn für das Teilproblem mit 11 Bäumen die maximal abgegebene Anzahl an Geraden mit vier Bäumen bei sechs liegt, bekommt man beispielsweise einen halben Punkt, wenn man wenn man eine Lösung mit drei Geraden auf denen vier Bäumen liegen eingegeben hat. Wenn man für alle Teilaufgaben die beste Lösung hat, kommt man demzufolge auf die Maximalpunktzahl von 50 Punkten (hat im Moment niemand).

Los geht’s!

Wer also Lust hat, in einer Programmiersprache seiner Wahl ein bisschen mit Teilnehmern aus aller Welt um die Wette zu programmieren oder schon seit längerem auf der Suche nach einer Alternative zum „Al Zimmermann’s Programming Contests“ ist, kann sich die offizielle Aufgabenstellung zum „Orchard Planting“-Wettbewerb (Update: Link entfernt, da Aufgabe nicht mehr online) anschauen und loslegen.

Hilfsmittel für Mathematik, Physik & Co

Der Computer kann einen bei vielen (Haus-)Aufgaben gerade auch in den Fächern Mathematik und Physik auf unterschiedliche Weise unterstützen. Sei es die Kontrolle von Aufgaben, die von Hand gerechnet wurden, die Berechnung von Ableitungen und Integralen, die sich nur schwierig oder gar nicht mit dem Wissen aus der Schule berechnen lassen oder die saubere Darstellung von Formeln in Protokollen oder Ausarbeitungen. Es gibt für diese Aufgaben eine ganze Reihe kostenloser Programme, die für Schüler und alle Anderen, die ein wenig Motivation mitbringen, sich in etwas Neues einzuarbeiten, äußerst nützlich sein können. Mit einer Beitragsserie zu diesen Programmen will ich einige ausgewählte kurz vorstellen.

Ich werde die einzelnen Beiträge hier verlinken:

Mathematik-Adventskalender der DFG

Wenn ich hier schon reihenweise irgendwelche Wettbewerbe ankündige, dann will ich das wenigstens einigermaßen vollständig tun. Also: Wie schon mehrere Jahre zuvor startet am 1. Dezember wieder der Mathekalender der DFG (Deutschen Forschungsgemeinschaft). Es gibt also wieder an jedem Tag vom 1. bis zum 24. Dezember eine Matheaufgabe zum knobeln (wie es sich für einen Adventskalender eben gehört).

Der Wettbewerb ist dieses Jahr in drei Altersgruppen eingeteilt. Neben der nach oben offenen Kategorie „ab 10. Klasse“ (also auch für Studenten und ausgewachsene Mathematiker) gibt es noch extra Kalender für die 4. bis 6. und die 7. bis 9. Klasse (mit voraussichtlich entsprechend einfacheren Aufgabenstellungen). Zu gewinnen gibt es diverse Preise, die von unterschiedlichen Sponsoren gestellt werden, darunter unter anderem Computer und Taschenrechner.

Freigeschaltet wird jede Aufgabe im Adventskalender um 18:00 Uhr des jeweiligen Tages und bis 24:00 kann die entsprechende Lösung eingereicht werden. Wenn man die Aufgabe später abschickt und keinen der drei Zeitjoker einsetzt, wird die Stafzeit erfasst. Die genauen Regeln finden sich hier.

Noch ein kleiner Tipp aus meiner Erfahrung: Ein Blick ins Forum des Mathe-Adventskalenders lohnt sich oft, gerade wenn man sich nicht auf Anhieb sicher ist, wie eine Aufgabe zu verstehen ist. Gelegentlich wurden in der Vergangenheit auch die Aufgaben selbst noch um zusätzliche Kommentare ergänzt.

Ich wünsche allen Teilnehmern eine frohe und mathematische Adventszeit.

Al Zimmermanns Programmierwettbewerb „Cards“ gestartet

Edit: Nachdem die Website der „Al Zimmermann’s Programming Contests“ seit längerem nicht mehr funktioniert, empfehle ich die Wettbewerbe bei „Infinite Search Space“.

Nachdem ich hier schon viel über Wettbewerbe geschrieben habe, die (fast) ausschließlich für Schüler gemacht sind (der Bundeswettbewerb für Informatik läuft gerade, der für Mathe fängt in den nächsten Wochen wieder an hat gerade wieder begonnen), möchte ich jetzt mal kurz zur Abwechslung auf einen Programmierwettbewerb hinweisen, der für alle (inbesondere auch professionelle erwachsene Programmierer) offen ist: Auf der Website der „Al Zimmermann’s Programming Contests“ wurde vor wenigen Tagen die Aufgabe „Cards“ (auf Englisch) veröffentlicht.

Diese Aufgabe ist wieder eine Art Optimierungsproblem, bei dem für ein bestimmtes Verfahren die maximale Anzahl an möglichen Schritten ermittelt werden muss. Es ist nach einer Lösung für insgesamt 25 (Teil-)Probleme gesucht werden, die sich nur durch einen Zahlenwert voneinander zu unterscheiden – Was für die einfacheren dieser Probleme auch kein größeres Problem ist. Für die höheren Zahlenwerte dürfte allerdings niemand (jedenfalls nicht ohne größere mathematische Geniestreiche) eine Lösung finden, die mit Sicherheit optimal ist. Darauf ist dann auch das Bewertungssystem ausgelegt: bei jedem Teilproblem gibt es einen Punkt, wenn man die bisher höchste gefundene Anzahl an Schritten gefunden hat; Wenn man eine Lösung hat, die weniger Schritte ergibt, erhält man entsprechend nur einen Teil des Punktes (es ist jeweils nicht nach der Anzahl an Schritten selbst, sondern nach der Ausgangsposition, von der aus die entsprechende Anzahl an Schritten durchgeführt werden kann, gefragt). Was letztlich entscheidend ist, ist also neben der Vereinfachung der Problems, das möglichst effiziente Programmieren, um in kurzer Zeit viele Möglichkeiten durchprobieren zu können. Naja, und dann braucht man noch freie Rechenkapazität, und das möglichst bis Mitte Februar (Ende des Wettbewerbs) …

Wer mehr wissen will geht einfach auf die Website des Wettbewerbs.

Bundeswettbewerb Informatik 2010/2011 gestartet

Heute startet die 1. Runde des 29. Bundeswettbewerbs Informatik (BWINF). Um einen kleinen Überblick über die Teilnahme und die Gewinnmöglichkeiten zu geben habe ich hier die wesentlichen Infos zusammen getragen:

Ablauf und Preise

Der Bundeswettbewerb Informatik läuft jedes Jahr über drei Runden, in denen man sich jeweils für die nächste Runde qualifizieren kann. Die ersten beiden Runden werden zu Hause gelöst. Hier gibt es schon Buchpreise und diverse Sonderpreise zu gewinnen.

Alle, die sich für die dritte Runde qualifiziert haben, werden dann eingeladen. In dieser Runde werden dann die Bundessieger ermittelt, denen unter anderem die Aufnahme ins Stipendienprogramm der Studienstiftung des deutschen Volkes und Geldpreise winken.

Teilnahme am Bundeswettbewerb Informatik

Bis Mitte November kann jeder die Aufgaben bearbeiten und seine Lösungen nach der Online-Anmeldung einschicken (weitere Infos gibt auf der verlinkten Anmeldeseite). Wer in der ersten Runde Erfolg hat, wird normalerweise über die weiteren Möglichkeit informiert.

Die Aufgaben der 1. Runde des 29. BWINF

Die Aufgaben und Zusatzmaterialien finden sich wie immer auf der entsprechenden Seite des Bundeswettbewerbs. Dort gibt es auch die Aufgaben als .pdf-Datei (Im Gegensatz zur recht drögen Darstellung des Bundeswettbewerbs Mathematik ist die Aufmachung des BWINF so verspielt und bunt, dass weder die Bildschirmdarstellung noch ein Schwarzweißausdruck wirklich praktisch sind. Es soll aber noch eine übersichtlichere Fassung folgen.). Zu jeder der Aufgaben wird neben dem Programm selbst (Quellcode und lauffähige Variante) auch eine Dokumentation von Idee und Programmaufbau verlangt.

Die Aufgabe 1 (die Aufgabenbeschreibung beginnt schon ganz oben in der mittleren Spalte auf Seite 4, auch wenn die Überschrift (mutwillig!) mittendrin steht 😉 ) ist dieses Jahr eine Kreativaufgabe, die in einer exotischen Spezialsprache für künstlerische Grafiken zu bearbeiten ist. Nachdem man sich hier ein bisschen eingearbeitet hat, sollte diese Aufgabe problemlos zu lösen sein.

Bei der Aufgabe 2 geht es darum, eine Simulation entsprechend der vorgegebenen Regeln zu entwickeln. Neben der Logik mit Kollisionserkennung dürfte vor allem die Steuerung der Parameter und die saubere Darstellung je nach Programmiersprache mit etwas Aufwand verbunden sein. Hier ist sicherlich Erfahrung in der Programmierung von grafischen Benutzeroberflächen hilfreich.

Aufgabe 3 erfordert im Wesentlichen das Einlesen von Daten, die dann entsprechend ausgewertet werden müssen. Beispieldaten gibt es laut BWINF ab Mitte September, der Link zu den Daten in der .pdf-Datei enthält bisher auch nur die erste Zeile der umgebrochen dargestellten URL.

Für die Aufgabe 4 dürfte ein bisschen Mathematik zur Lösungsfindung nötig sein, die man dann in einen perfekten Spieler eines einfachen Kartenspiels umsetzten muss. Nachdem das Spiel aber nur vom Würfel und einem einzigen Spieler abhängt (wenn ich es richtig verstanden habe), sollte auch diese Aufgabe machbar sein.

Die letzte Aufgabe (Aufgabe 5) ist wie die dritte Aufgabe eine Logistikaufgabe, die allerdings vermutlich etwas mehr Vorüberlegungen (und ein paar Skizzen oder ein gutes Vorstellungsvermögen) erfordert.

Insgesamt sind die Aufgaben damit wieder recht abwechlungsreich. Wer tatsächlich am 29. BWINF teilnehmen möchte sollte bald anfangen, damit er auch wirklich Zeit hat, bis Mitte November nicht nur saubere Programme sondern auch eine entsprechende Dokumentation zu schreiben.

Und damit es nicht wieder so geht, wie beim BWM: Von mir gibt es keine weiteren Hinweise, unter anderem aus den gleichen Gründen wie dort.

Viel Erfolg an alle (ehrlichen) Teilnehmer des 29. Bundeswettbewerbs Informatik!

Apfelmännchen im Browser

Edit: Leider funktioniert das hier beschriebene Applet derzeit nicht, deshalb habe ich den Link dazu entfernt.

Darstellung der Mandelbrotmenge
Mandelbrotmenge

Nachdem ich vor kurzem ein sehr primitives Java-Applet mit Erklärung (Quellcode hier) geschrieben habe, mit dem sich das „Apfelmännchen“ (das heißt die Mandelbrotmenge) darstellen lässt, habe ich hier noch ein wesentlich komfortableres und funktionsreicheres Applet geschrieben, mit dem sich die Mandelbrotmenge untersuchen lässt. (Die ganzen Bilder der Mandelbrot-Menge hier im Blog sind auch damit berechnet.)

Apfelmännchen im Browser weiterlesen

Mandelbrotmenge einfach selbst programmiert

Darstellungen der Mandelbrotmenge (auch „Apfelmännchen“ genannt) sind mit das Schönste was die Mathematik zu bieten hat. Nachdem ich vor kurzem schon die mathematischen Grundlagen (.pdf-Datei) erklärt habe, will ich mich hier der Programmierung eines einfachen Java-Applets zur Anzeige des „Apfelmännchens“ widmen. Sowohl den vollständigen Programmcode als auch das eingebettete Applet finden Sie unten.

Wer weniger an der Technik als vielmehr am Herumspielen mit der Mandelbrotmenge interessiert ist, dem kann ich mein aufwändigeres Applet u.a. mit Zoomfunktion empfehlen.

An Mathematik brauchen wir nur die beiden Formeln (1) und (2) aus der Erklärung, die wir wie in der .pdf Datei unter „Wie kann ich das programmieren“ beschrieben berechnen. Hier sind die hier wesentlichen Abschnitte noch einmal als Auszug:

Die Formeln:

xn+1 = xn2 – y n2 + a
yn+1 = 2xnyn + b

Dies lässt sich nun ohne Kenntnis von komplexen Zahlen berechnen, wenn a und b bekannt sind (x0 = y0 = 0).

Die Beschreibung:

Um die Mandelbrot-Menge darstellen zu können, berechnet man für jeden Punkt des Bildes die Folge mit seinen Koordinaten a (üblicherweise nach rechts) und b (nach oben) entsprechend den Gleichungen oben. Dazu setzt man eine maximale Anzahl an Iterationen (das heißt Anzahl an Folgengliedern die berechnet werden) und prüft nach jeder Iteration ob x2+y2>4 ist. Falls ja, ist der Punkt mit den Koordinaten a und b definitiv nicht Teil der Mandelbrot-Menge. Wenn diese Bedingung nach einer bestimmten Anzahl an Iterationen noch nicht erfüllt ist, kann man mit hoher Wahrscheinlichkeit davon ausgehen, dass er Teil der Mandelbrot-Menge ist (je höher die Anzahl der Iterationen desto sicherer das Ergebnis). Die Punkte, die zur Mandelbrot-Menge gehören, werden dann (meist schwarz) eingefärbt.

Dabei muss man aufpassen, dass man bei der Berechnung des zweiten Terms nicht schon mit dem neuen Ergebnis aus der ersten Berechnung arbeitet. Umgesetzt in Java sieht die Funktion zur Berechnung, ob ein Punkt (wahrscheinlich) zur Mandelbrotmenge gehört dann folgendermaßen aus:
Mandelbrotmenge einfach selbst programmiert weiterlesen

Apfelmännchen für die Schule

Die als „Apfelmännchen“ bekannte Mandelbrot-Menge ist wahrscheinlich eines der schönsten Fraktale überhaupt. Die Berechnung, die zum Apfelmännchen führt, enthält jedoch komplexe Zahlen und ist deshalb normalerweise für Nichtmathematiker – insbesondere auch für Schüler – nicht nachvollziehbar.

Zomm in Visualisierung der Mandelbrot-Menge
Zoom in eigener Berechnung

Ich hoffe jedoch, dass sich mit solchen, für jedermann schön anzusehenden Fraktalen, auch die Begeisterung für Mathematik wecken lässt. Deshalb habe ich versucht eine, für interessierte Schüler schon in der Mittelstufe verständliche, Einführung zu verfassen. Sie sollte zum Einen als kleine Ergänzung des Schulstoffs im Mathematikunterricht geeignet sein, zum Anderen beschreibt sie aber auch, mit welchen Mitteln die Mandelbrot-Menge berechnet und dargestellt werden kann, ganz ohne dass man sich komplexen Zahlen beschäftigen muss. Damit kann man sich beispielsweise im Informatikunterricht ganz auf den Programmaufbau und das Programmieren konzentrieren.

Der Text ist in mehrere Abschnitte unterteilt: Nach einer kurzen Erklärung der imaginären Einheit wird die Definition der Mandelbrot-Menge angegeben und so umgeformt, dass alles mit reellen Zahlen berechnet werden kann. Dann wird erklärt, wie sich das alles in einem Programm umsetzen lässt (hier gibt es noch eine ausführlichere Erklärung mit Quellcode und lauffähigem Java-Applet). Abschließend gibt es noch Anregungen, welche Verbesserungen am Programm noch vorgenommen werden könnten. Und für alle diejenigen, die die Tiefen der Mandelbrot-Menge einfach selbst erkunden wollen, gibt es von mir noch ein entsprechendes Programm, das im Browser läuft.

Die Erklärung des Apfelmännchens für Schüler kann hier als .pdf-Datei heruntergeladen werden.