Competitive Programming

Für das Projekt Competitive Programming beschäftigten wir uns mit verschiedenen komplexen algorithmischen Problemen u.a. aus den Bereichen der Geometrie, Graphentheorie und dynamischen Programmierung. Praktische Erfahrung sammelten wir beim Lösen von Programmierherausforderungen und bei der Teilnahme an kurzen Programmierwettbewerben, an welchen wir allein und auch als Gruppen teilnahmen. Dazu orientierte sich das Projekt an Problemsätzen von Websites wie https://www.spoj.com/https://www.topcoder.com/, http://www.codeforces.com/ und https://uva.onlinejudge.org. Um die Korrektheit unserer erstellten Algorithmen zu untersuchen, war es oft notwendig, sich mit den verschiedenen Randfällen zu beschäftigen. Hierfür erstellten wir verschiedene Test-Fälle um unsere Lösungen zu überprüfen.  Bei vielen Problemen im Bereich des Competitive Programming reichte das richtige Ergebnis allein jedoch nicht aus, da auch die Einhaltung weitere Kriterien wie eine maximale Laufzeit oder eine maximale Menge an genutztem Speicher beachtet werden mussten.

Das Projekt hat uns dabei geholfen, in zeitlich begrenzten Szenarien einen kühlen Kopf zu bewahren und effizient an Lösungen für die jeweiligen Herausforderungen zu arbeiten. Durch die Mischung aus Programmierherausforderungen und das Besprechen alternativer Lösungen haben wir oft neue Sichtweisen auf bekannte Probleme gewonnen. Vor allem die maximale Laufzeit sowie der maximale Speicherbedarf der Algorithmen hat uns dazu gebracht, kritischer zu programmieren. Zusammenfassend kann man sagen, dass wir während unseres Projekts viele wichtige Erfahrungen sammeln konnten und viele verschiedene algorithmische Probleme sowie mögliche Lösungen kennengelernt haben. Gerade die kritische Herangehensweise an die effiziente Programmierung und das Finden von sinnvollen Testfällen für Algorithmen sind Fähigkeiten, mit welchen wir uns bereits gut auf die Praxis im Studium und Berufsleben sowie auf Code-Interviews bei großen IT-Firmen vorbereitet fühlen.