Database Research Group

WSI – Database Systems Research Group

Selected Fun Problems of the ACM Programming Contest (Proseminar)


News
  • Jun 23, 2017 — Die restlichen Seminartermine finden ab dem 30. Juni jeweils erst freitags um 11:15 Uhr statt (d.h. eine Viertelstunde später). — Torsten Grust

  • Jun 12, 2017 — Ein Vortragstermin verschiebt sich um eine Woche nach hinten: 16.6. -> 23.6.2017. Unsere Terminübersicht (siehe unten) wurde entsprechend angepasst. — Tobias Müller

  • Apr 25, 2017 — Wegen des großen Andrangs bieten wir vier zusätzliche Seminarplätze an. Die ausgewählten "Nachrutscher" wurden heute informiert. Es wird deshalb zwei zusätzliche Vortragstermine geben. — Tobias Müller

  • Mar 27, 2017 — Die Vorbesprechung wird am Freitag, dem 21. April um 11:00 Uhr stattfinden. Wir treffen uns in Raum B 305.1 (Sand 13).

    Wer am Seminar teilnehmen will, soll bitte zu diesem Termin erscheinen. Ihr werdet dort einen Überblick über das Seminar erhalten und könnt natürlich auch Fragen zum Ablauf stellen. — Tobias Müller


In diesem Proseminar bearbeiten die Teilnehmer/Innen jeweils ein ausgewähltes Problem des seit 1970 alljährlich stattfindenden ACM Programming Contest. 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 wird und fast immer mit “Aha!”-Effekten einhergehen.

Jeder Teilnehmer wird in seinem Seminarvortrag sein bearbeitetes Problem vorstellen und seine Lösung präsentieren. Die verwendete Programmiersprache darf/soll so gewählt werden, dass sie zu der Problemstellung und den Vorkenntnissen des Teilnehmers gut passt. Es gilt lediglich die strikte Einschränkung, auf Java zu verzichten.

Falls es beim Lösen/Implementieren des Problems "haken" sollte, ist das kein Show Stopper: wir geben dazu gerne Tipps — niemand muss deshalb dieses Seminar nicht bestehen.

Seminartermine

Datum1. Vortrag2. Vortrag
2.6.17 Jonathan Leistner: Merging Maps (Tobias) Stefan Feil: Fold-up Patterns (Chris)
16.6.17 entfällt entfällt
23.6.17 Andreas Rist: Rush Hour (Benjamin) Tobias Breuer: Lazy Math Instructor (Daniel)
30.6.17 Solveig Klepper: Sisco's Galaxy (Benjamin) Raphael Verbücheln: Finding Seats (Daniel)
7.7.17 Patrick Schroeder: Oil (Chris) Steffen Lindner: Gates (Tobias)
14.7.17 Jan Splett: Solver (Daniel) Marius Bernhardt: Image Is Everything (Chris)

Die Termine beginnen jeweils um 11:15 Uhr und sind auf 90 min angesetzt.

Es gilt für alle Teilnehmer, an allen Terminen anwesend zu sein! Weitere interessierte Hörer sind herzlich willkommen.

Themen (ACM ICPC Problemstellungen) und Seminarablauf

Eine Einführung in das Seminar, ein Blick auf beispielhafte Problemstellungen und die Themenvergabe finden in einem ersten Treffen zu Beginn des Semesters statt.

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

Es besteht eine 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.

Im Folgenden findet ihr einige ACM ICPC Problems als Beispiele für Probleme, die wir in diesem Seminar bearbeiten wollen:

ACM ICPC Problems:

Zu einigen der Probleme, die wir bearbeiten werden, findet ihr hier eine Möglichkeit die Ergebnisse zu eingegebenen Instanzen zu ermitteln. Unter Umständen findet ihr dort sogar Probleminstanzen vor, die Benutzer vor euch getestet haben.

Hinweise zu den Vorträgen

  • Wichtig: Spätestens ein bis zwei Wochen vor eurem Vortrag solltet ihr einen Termin mit eurem Betreuer 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. 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 eures 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.

  • Die tatsächliche Demonstration eures lauffähigen Programmes gehört ebenfalls zu einem gelungenen Vortrag. Sie kann nicht zuletzt sehr 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.

  • Generell gilt: vermittelt das Prinzip eurer 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.

  • 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.

  • Zur Erstellung eurer Folien können wir euch die LaTeX-Class Beamer empfehlen.

Hinweise zu den Ausarbeitungen

  • Die Ausarbeitung eurer Vorträge erfolgt ausnahmslos in LaTeX. Hierfür soll die zweispaltige Formatvorlage SIGCONF Proceedings der ACM verwendet werden. Ihr könnt die Original-Vorlage herunterladen oder diese reduzierte Version benutzen. Die Ausarbeitung soll insgesamt 4-6 Seiten umfassen.

  • Für Bilder empfehlen wir euch im Weiteren das LaTeX-Paket TikZ zu verwenden.


Additional material (code, data)