Selected Fun Problems of the ACM Programming Contest (Proseminar)

Seminar
Readers
Tom Schreiber

In diesem Proseminar werden die TeilnehmerInnen mit jeweils einem ausgewählten Problem des seit 1970 alljährlich stattfindenden ACM Programming Contest konfrontiert. Diese Probleme zeichnen sich einerseits durch recht spassige und interessante Aufgabenstellungen aus, andererseits erlauben diese Aufgaben Lösungen, die oft sehr elegant und kompakt sind (der Kern umfasst typischerweise weniger als 50 Zeilen Programmcode) und fast immer mit “Aha!”-Effekten einhergehen.

Die SeminarteilnehmerInnen werden jeweils das Problem vorstellen, eine möglichst elegante Lösung—formuliert in der Lieblingsprogrammiersprache der Teilnehmerin—erarbeiten und diese während des Seminarvortrags präsentieren. (Falls es bei der Lösung des Problems “haken” sollte, ist das kein Show Stopper: wir geben dazu gerne Tipps — niemand muss deshalb dieses Seminar nicht bestehen.)

Seminartermine

Je zwei eurer Vorträge (Länge je ca. 25–30 Minuten, mit anschliessender kurzer Diskussion) werden zu den wöchentlichen Seminarterminen stattfinden. Die Lage der Termine legen wir in Absprache mit euch fest.

Es besteht eine (informelle) Verpflichtung zur Anwesenheit an allen Terminen — nicht zuletzt schon aus Fairness gegenüber euren Kommilitonen. Gebt uns ggf. Bescheid, falls ihr zu einem Termin begründet nicht erscheinen könnt.

Themen (ACM ICPC Problemstellungen) und Seminarablauf

Wir laden euch ein, die Problemstellungen herunterzuladen (jeweils PDF-Dokumente, typischerweise < 100 KB) und durchzusehen. Sobald ihr eure “Lieblings-Probleme” identifiziert habt, sendet bitte eine E-Mail mit folgenden Inhalt an Tom Schreiber

Subject: Proseminar ACM ICPC Inhalt: Vorname Name ( Matrikelnummer ) Problem #x Problem #y

wobei ihr #x und #y durch die Nº der von euch gewählten Probleme ersetzt (Problem #y bekommt ihr zugewiesen, falls #x bereits vergeben sein sollte — Kollisionen bei den Themenwünschen lösen wir auf). Bitte benutzt eine E-Mail-Adresse, unter der wir euch jetzt und auch im Laufe des Wintersemesters verlässlich erreichen können. Danke.

Fragen hierzu beantworten Tom Schreiber und Torsten Grust.

ACM ICPC Problems:

Hinweise zu den Vorträgen

  • Wichtig: Spätestens ein bis zwei Wochen vor eurem Vortrag solltet ihr einen Termin mit Tom Schreiber ausmachen, um euren kompletten Foliensatz durchzusprechen. Das sich daraus Änderungen an den Folien ergeben, ist die Regel (nicht die Ausnahme). Stellt also bitte sicher, dass ihr euch ein ausreichend grosses Zeitfenster für nötige Änderungen einräumt.

  • Die Länge der eigentlichen Vorträge beträgt jeweils maximal 30 Minuten. Die Erfahrung zeigt, dass in diesem Zeitrahmen nicht mehr als etwa 25 Folien sinnvoll präsentiert werden können. An die Vorträge schließt sich eine kurze offene Diskussion an, die sich auf den Inhalt des Vortrages aber auch auf den Vortrag an sich (Folien, Sprache) beziehen kann.

  • Ihr findet weitere wertvolle Hinweise zum Aufbau eines Vortrages, zum Layout von Folien und dem Halten des Vortrages selbst, auf den folgenden Seiten:

  1. Simon Peyton-Jones (Microsoft Research, Cambridge): How to give a good research talk
  2. Andreas Zeller (U Saarland): Der perfekte Seminarvortrag
  • Der Inhalt des Vortrags sollte das durch den ACM Programming Contest gestellte Problem genau erläutern und vielleicht an 1–2 Beispielen demonstrieren. Dabei solltet ihr betonen, was das Problem interessant und/oder knifflig macht. Den Rest des Vortrages solltet ihr (1) auf die Diskussion möglicher Lösungsansätze (es kann ja durchaus mehrere denkbare Lösungen geben) und (2) die Darstellung der Realisierung der von euch gewählten und implementierten Lösung verwenden. Wichtig: Auf einer Folie Ihres Vortrages sollet ihr möglichst genau begründen, warum ihr gerade die von euch gewählte Programmiersprache einsetzt. Falls ihr nur eine Programmiersprache beherrscht, verwendet diese Folie stattdessen darauf, 2–3 Features einer (fiktiven) Programmiersprache zu identifizieren, die euch bei der Formulierung der Lösung besonders hilfreich gewesen wären.

  • Eure Programm zur Lösung des Problems wird typischerweise einen algorithmischen Kern — oft wenige Zeilen — beinhalten. Diesen Kern, evtl. gekürzt und vereinfacht falls angebracht, könnt und sollt ihr während des Vortrags zeigen und erklären. Wenn sich der Code selbst nicht eignet, ist ein Flussdiagramm oder ähnliches vielleicht eine bessere Alternative. Routinen oder Code-Teile, die Eingabe/Ausgabe implementieren sind oft sekundär und gehören nicht in Ihren Vortrag.

  • Beachtet, dass beim ACM Programming Contest allgemein wohlgeformte Inputs vorausgesetzt werden dürfen. Eine explizite Behandlung illegaler Eingaben könnt ihr auch im Rahmen dieses Seminars ignorieren.

  • Generell gilt: vermittelt das Prinzip eure Lösung — eine genaue Studie des Code ist nicht angebracht. Es ist auch denkbar, (Ausschnitte des) Code ausschliesslich ganz am Ende des Vortrages, auf sog. Backup-Folien in den Foliensatz aufzunehmen. Diese Folien zeigt man nur, wenn die Diskussion nach dem Vortrag oder spezifische Nachfragen dazu führen sollten. Wenn der Weg zur Lösung (nicht die Lösung selbst) systematisch war und einen eye opener enthält, dann kann das sehr zum Verständnisbildung beitragen. Die eher wahllose Darstellung von ‘‘hab’s mal probiert, ging dann aber doch schief’’-Versuchen verwirrt jedoch eher.

  • Der Vortrag von Matthias Reitinger aus dem SS 2007 setzt diese Vorgaben vorbildlich um (dieser Vortrag wurde mittels der LaTeX-Class Beamer realisiert, die wir euch für die Erstellung des Vortrags nur empfehlen können): Shuffle Off to Milledgeville (Folien, PDF, ca. 408kB)

  • Die tatsächliche Demonstration eures lauffähigen Programmes während des Vortrages kann sehr sinnvoll und motivierend für eure Zuhörer sein. Auch hier gilt aber: kleine Beispiele, die den common case zeigen und nicht die vielleicht eher esoterischen Randfälle des Problems und seiner Lösung zum Inhalt haben.

Hinweise zu den Ausarbeitungen

  • Die Ausarbeitung eurer Vorträge erfolgt ausnahmslos in LaTeX. Für eine Einführung in LaTeX könnt ihr euch das Buch “LaTex” von Helmut Kopka aus der Bibliothek ausleihen. Das Buch “The LaTeX companion” von Frank Mittelbach sollte euch ausserdem alle weiterführenden Fragen beantworten. Für Bilder empfehlen wir euch im Weiteren das Paket TikZ zu verwenden.

  • Die folgende Ausarbeitung, die aus einem der früheren Selected Fun Problems-Seminare stammt, könnt ihr als Orientierungshilfe für die Länge, Form und den Detailgrad eurer Ausarbeitung verwenden.

  • Der Zeitrahmen für die Abgabe der Ausarbeitungen dehnt sich bis zum Ende der Vorlesungszeit aus, also den 20. Februar 2010. Bitte schickt alle Ausarbeitungen im PDF-Format (also nicht die LaTeX-Quellen) per E-Mail an Tom Schreiber.