Anlässlich der diesjährigen Fußball-EM richtet der Mathe-dual e.V. einen Sonderprogrammierwettbewerb aus. Ziel des Wettbewerbs ist es, ein Programm zu schreiben, welches die Vorrunde der EURO 2016 vorhersagt – je besser, desto gut!

Bis wann?

Das erste Spiel der Vorrunde findet am 10.06.2016 statt, das Programm muss vorher eingereicht werden. Abgabefrist ist der 09.06.2016 23:59:59.

Was muss ich wo abgeben?

Abzugeben ist Quellcode in einer Programmiersprache freier Wahl, eine README mit Infos zur Kompilation und Ausführung sowie eventuell die Datenbasis des Programms (s.u.). Die Abgabe erfolgt per Mail mit einer Zip-Datei im Anhang an Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!

Was muss ich dabei beachten?

Das Programm darf (soll!) alle Datenquellen anzapfen, die euch sinnvoll erscheinen, um eine Vorhersage über die Spiele der Vorrunde zu machen. 

Dabei gilt grundsätzlich: Alles, was legal ist, ist auch erlaubt!

Einige kleine Einschränkungen gibt es aber dennoch:

  • Das Programm darf keine Inhalte aus dem Internet nachladen.
  • Sollen Online-Inhalte verwendet werden (z.B. Ranglisten, ...), so müssen diese vor Abgabe heruntergeladen und als Datenbasis mitgeliefert werden.
  • Das Programm muss auf Basis der Eingabedateien auch tatsächlich etwas berechnen. 
  • Das Programm darf nicht mehr als 10 Minuten CPU-Zeit in Anspruch nehmen.

Nach der Berechnung soll das Programm eine Ausgabedatei mit allen Spielen der Vorrunde schreiben, wobei die Spiele in chronologischer Reihenfolge aufzulisten sind. Das genaue Format ist dabei wie folgt:

Datum;Uhrzeit;Mannschaft1;Mannschaft2;X:X;

Datum;Uhrzeit;Mannschaft1;Mannschaft2;X:X;

Datum;Uhrzeit;Mannschaft1;Mannschaft2;X:X;

...

Bewertung

Die Programme erhalten Punkte für die abgegebenen Tips, das Programm mit den meisten Punkten gewinnt. 

Die Punkte werden wie folgt vergeben:

  • 3 Punkte: Vollständig korrekt getipptes Ergebnis 
  • 2 Punkte: Tordifferenz korrekt getippt (z.B. 2:0 statt 3:1)
  • 1 Punkt: Sieger korrekt getippt 
  • 0 Punkte: Sonst

Und wozu das Ganze?

Für Ruhm und Ehre natürlich! Außerdem wird es themenspezifische Überraschungen zu gewinnen geben, falls euch Ruhm und Ehre nicht reichen.

 

Sieger Programmierwettbewerb 2015-16

Der "Fix it."-Termin des diesjährigen Programmierwettbewerbs fand am 18.3. statt. An diesem Abend wurden die eingesandten Fälle aus der "Break it."-Phase veröffentlicht. Für alle Teilnehmenden bestand für einen begrenzten Zeitraum die Möglichkeit das eigene Programm so zu korrigieren, dass es möglichst viele der Fehlerfälle korrekt behandelt. Im Anschluss gab es wie auch während des ersten Termins eine Pizza-Pause, die das Organisations-Team für die Auswertung und eine Umfrage zum Wettbewerskonzept nutzte, um in Anschluss die Sieger zu küren.

Die folgende Tabelle zeigt die Preisgelder aller Teams. Die Bewertung setzt sich hierbei aus den Leistungen der "Build it."- und "Fix it."-Phase (Spalte Build it.) zusammen, in denen effizientes Programmieren belohnt wurde. In der "Break it."-Phase bestand das Ziel in der Erstellung von Eingabedaten, die bei einer möglichst großen Anzahl von Programmen in verschiedenen Fehler-Äquivalenzklassen zu fehlerhaften Ausgaben führte. Das Team mit der besten Leistung wird jeweils mit 100% geführt. Die Tatsache, dass eine gute Platzierung in der Gesamtauswertung auch durch gute Leistungen in nur einer der beiden Kategorien erreicht werden kann, zeigt, dass verschiedene Ansätze zum Erfolg führen können.

Team Build it. Break it. Preisgeld (€)
getrekt 100% 1 84% 2 124
builditbreakit2016 68% 5 100% 1 116
mathedual-wettbewerb-2016 75% 4 53% 3 85
eldorandev 96% 2 15% 6 71
pizza_funghi 50% 8 46% 4 65
programming-contest 62% 7 29% 5 60
buildbreakfix 80% 3 12% 7 58
mpw0xf 75% 4 0% 8 46
break_this 67% 6 0% 8 42
mathedualkrusebengsch 50% 8 0% 8 31
lebu 50% 8 0% 8 31
wettbewerb-16 34% 9 0% 8 21
no_more_names_please 0% 10 0% 8 0

Mit dem "Fix it."-Termin geht der diesjährige Programmierwettbwerb nach neuem Konzept zu Ende. Wie erwartet haben wir an einigen Stellen noch Verbesserungspotential entdeckt (z.B. bei der endgültigen Auswertung oder der Beantwortung von Rückfragen im laufenden Wettbewerb). Unter dem Strich freuen wir uns über das erhaltene positives Feedback sowie die Ankündigungen erneut teilzunehmen. Aus Sicht des Organisations-Teams steht fest, dass das neue Konzept zum einen durch die Vorbereitungsarbeiten im Team und zum anderen durch die Interaktion bei den Veranstaltungsterminen sehr viel Spaß gemacht hat. Wir bedanken uns bei allen Teilnehmenden für ihr Engagement und das Feedback und freuen uns schon auf den nächsten Mathe-dual e.V.-Programmiertwettbewerb mit euch!

Am 26.2.2016 hat am späten Nachmittag bis in den Abend hinein die Build It-Phase des Programmierwettbewerbs 2016 stattgefunden. Mit über 30 Teilnehmenden in mehr als 10 Teams wurde nach der Klärung organisatorischer Fragen der Wettbewerb gestartet und vier Aufgaben zeitlich versetzt ausgegeben. Während der Wettbewerbsphase wurde in zwei Programmiersprachen (Java, C#) versucht innerhalb der kurz bemessenen Zeit korrekte Lösungen zu erstellen. Begleitet wurde das Programm von Fragen, die das Organisationsteam für alle Teilnehmenden beantwortete, sowie reichlich Verpflegung (Getränke und Süßigkeiten), vor der Ausgabe der dritten Aufgabe wurde eine Pizzapause eingelegt. Zum Ende des ersten Teils wurde alle eingesandten Lösungen nach der Abgabe direkt auf Funktionsfähigkeit mit dem Basisbeispiel getestet, um eine Minimalfunktionalität sicherzustellen. Die Teilnehmenden wurden anschließend in die Break it-Phase entlassen und werden am 18.3.2016 wieder für den Fix it-Termin im IT Center erwartet.

Programmieren

Pizza-Pause

 

Hier werden alle für das Teilnehmendenfeld gestellten und beantworteten Fragen gesammelt:

  • Ist die Nutzung von Libraries erlaubt?
    • Grundsätzlich ja.
    • Für die zentrale Auswertung müssen ggf. Voraussetzungen geschaffen werden, so dass die genutzte Library dann allen Teams zur Verfügung steht.
    • Grenzen stellen Aspekte wie Sicherheit, Größe der Bibliotheken, Fairness (z.B. Ressourcenbedarf) dar.
  • Zwischenauswertung
    • Wie wird die Platzierung bestimmt?
      • Zunächst wird die Anzahl der gelösten Tests gewertet. Teams, die dieselbe Anzahl gelöster Tests werden nach der Summe der Laufzeiten aufsteigen, beginnend mit der Geringsten, sortiert.
    • Wie lange dauert die Aktualisierung der Zwischenergebnisse?
      • Dies ist stark abhängig davon, wie lange die Programme für die Berechnung der Lösungen benötigen.
      • Angestrebt wird ein Aktualisierungszyklus von max. 1h.
  • Auf welchem Branch läuft die Auswertung?
    • Die Auswertung erfolgt auf dem main-Branch.
  • Müssen alle möglichen Lösungen für eine Problemstellung angegeben werden?
    • Nein, es reicht eine korrekte Lösung bzw. die Aussage das keine Lösung existiert.
  • Werden die Tests nacheinander durchlaufen, auch wenn ein Test fehlschlägt oder werden alle Tests durchlaufen?
    • Ja, es werden alle Tests durchlaufen. Jeder Test läuft dabei maximal zwei Minuten.
  • Warum ändert sich die Zeit eines anderen Teams, wenn ich einen Push mache?
    • Ein Push löst, wenn er lokal erfolgreich getestet wurde, einen zentralen Lauf aus. Der zentrale Lauf nutzt dabei von jedem Team, den aktuellen Stand des main-Branch. Es gibt jetzt mehrere Szenarios: Ein Team hat eine lokal nicht erfolgreich getestete Lösung, die nun für einen zentralen Lauf ausgewertet wird, und so zu einer Änderung der Zeit führt. Weitere Szenarios können durch Pushs auf Development-Branches, schnell aufeinander folgende Pushs verschiedener Teams oder durch Lösungen deren Laufzeit variiert  entstehen.
  • Bei einem Fall mit der Dimension 1x2x3, darf die Lösung in einer anderen Form z.B. 3x2x1 zurückgegeben werden?
    • Ja, der Test-Algorithmus lässt dies zu.
  • Wie sehen die Fälle aus, die im zentralen Lauf getestet werden?
    • Ein Fall, wie aus den Ergebnissen zu Beginn abgeleitet werden konnte, hat keine Lösung und prüft, ob dieser Zustand korrekt erkannt wird.
    • Ein weiterer Fall hat die Kantenlängen von 10, 10 und 2 Würfeln und bis zum jetzigen Zeitpunkt (01.03.2022) sind alle eingesandten Lösungen an dem Zwei-Minuten-Limit gescheitert.
  • Wie viele Threads kann ein parallelisierter Algorithmus nutzen?
    • Es werden vier Prozessorkernen für das Ausführen der Tests bereitgestellt. Die Anzahl an Threads sollte aber auch die Struktur des gewählten Algorithmus berücksichtigen.