In der praktischen Richtung musst du zu jeder Aufgabe ein komplettes Programm (die Programmiersprache ist dir überlassen) schreiben, das deinen Lösungsweg implementiert, und anschliessend den Quelltext einschicken. Dazu haben wir die folgenden fünf kniffligen Aufgaben entworfen:
Hinweis: Im Gegensatz zum letzten Jahr ist es nicht mehr möglich in Teams einzusenden.
Hinweis: Dein Programm sollte die Eingabe von der Standardeingabe lesen und das Resultat auf die Standardausgabe ausgeben! Falls du eine Programmierstprache verwendest, bei der das (fast) nicht möglich ist, verwende eine Datei für die Ein- und Ausgabe.
Du solltest deine Lösungen direkt via dem Upload-Formulat, das in den Aufgaben verlinkt ist, einsenden. Als Einsendung sollst du entweder den Sourcecode direkt abgeben, oder falls er aus mehreren Dateien besteht, als Archiv einsenden. Es gibt ebenfalls ein Feld um eine Dokumentation zu den jeweilligen Aufgaben abzugeben (diese ist zwar optional aber sehr zu empfehlen)
Falls du Probleme beim Einsenden hast, kannst du deine Lösungen auch direkt per email an practical@soi.ch senden (schreibe in diesem Fall umbedingt deinen vollen Namen und SOI-Loginname).
Sende bitte keine kompilierten Programme, sondern lediglich den Programmcode. Wir werden kompilierte Programme nicht ausführen. Die Dokumentation kann in einem beliebigen Format (bsp: pdf, latex, doc, plaintext, etc.) geschrieben werden.
Versuche dich nach Möglichkeit auf nur eine Quelltextdatei zu beschränken um Übersicht und Kompilieren nicht zusätzlich zu komplizieren. Deine Quelltextdatei sollte einige Kopfzeilen enthalten mit den folgenden Informationen: Gelöste Aufgabe, Programmiersprache, Username:
/* Task: sample Lang: C++ User: chuck */
Ein Programm, das alle unsere Testfälle innerhalb der Zeitlimite (einige Sekunden) korrekt löst, erhält die maximale Punktzahl. Diese Testfälle sind nicht öffentlich und du kannst dein Programm vorher nicht auf ihnen ausprobieren. Bei der Zeitbeschränkung geht es um die Asymptotische Laufzeitkomplexität deines Programms. Im Allgemeinen heisst das, du solltest die Laufzeit von Monaten auf Sekunden optimieren, nicht aber von 5s auf 3s. Desweiteren bist du frei, wie viel Speicher du beanspruchst, solange es in einem vertretbaren Rahmen bleibt (so ca. 100MB). Falls dein Programm schnell und korrekt ist, bekommst du die maximale Punktzahl (und kannst keine Zusatzpunkte verdienen mit der Dokumentation) Für ein Korrektes aber langsames Programm verteilen wir Teilpunkte (je nachdem wie Langsam dein Programm ist) Ein schnelles aber (teilweise) falsches Programm wird (fast) keine Punkte erzielen.
Wir empfehlen dir auch, deine Lösungsidee in einer separaten Datei in Worten zu beschreiben. Falls in deinem Programm Fehler enthalten sind, verlierst du alle Punkte, die dieser Fehler verursacht. Wenn aus deiner Dokumentation aber ersichtlich ist, dass die eigentliche Lösungsidee richtig ist und es sich nur um einen Flüchtigkeitsfehler handelt, so werden wir einige Teilpunkte vergeben (basierend auf Qualität und Inhalt deiner Dokumentation und Quelltextdatei).
Diese Regeln sollen einen Schönheitswettbewerb vermeiden. (Es geht darum, was zu lernen beim Dokumentieren deiner Programme.)