Niektórzy studenci mają doświadczenie w startach w zawodach Olimpiady
Informatycznej lub nawet zawodach ACM ICPC. Niewielu jednak wie, jak wygląda
proces przygotowania takiego konkursu przez organizatorów. Czasami, a może
nawet często, przygotowanie zadania jest trudniejsze od jego rozwiązania.
Celem tego kursu jest pokazanie tego świata właśnie z tej drugiej strony, co
być może będzie też pomocne w przygotowaniach do startów. Zainteresowane osoby
uzyskają też informacje o tym jak wziąć udział w pracach nad konkursami
organizowanymi na naszej uczelni i poza nią.
Program wykładu
===============
Pierwsza część kursu obejmować będzie przegląd zagadnień związanych z
przygotowaniem zadania konkursowego: właściwe przygotowanie treści, dobór
limitów na rozmiar danych wejściowych, dobór ograniczeń czasu i pamięci,
przygotowanie danych testowych, przygotowanie programów pomocniczych, dobór
punktacji za rozwiązania częściowe, wymyślanie własnych zadań, omówienie
potencjalnych błędów podczas przygotowania zadania.
Dalsze zagadnienia stanowić będą wybrane, pojedyncze, nieco trudniejsze
tematy. Niektóre z nich prowadzone będą na zasadzie mini seminariów przez
studentów.
Przykłady:
* ocena jakości losowych testów w zadaniach grafowych (np. dla problemu spójności grafu czy najkrótszych ścieżek),
* testowanie rozwiązań zrandomizowanych,
* przygotowanie złośliwych danych dla obliczeń zmiennoprzecinkowych w zadaniach geometrycznych,
* zastosowania machine learning do przygotowania danych testowych w zadaniach (na przykład: złośliwe czasowo testy w zadaniach przepływowych),
* automatyczne wykrywanie niesamodzielnych rozwiązań,
* bezpieczeństwo automatycznego procesu oceny.
Możliwe będzie również proponowanie własnych tematów.
Pod koniec kursu skupimy się na bardzo podstawowych elementach dydaktyki
algorytmiki konkursowej: jak umiejętnie przekazywać zrozumianą wiedzę innym
studentom i młodszym uczniom oraz jak przygotować dobrej jakości materiały
edukacyjne z tej dziedziny.
Program ćwiczeń/pracowni
========================
Na ćwiczeniach/pracowni w pierwszej części semestru skupimy się na dokładnej
analizie kolejnych etapów przygotowania zadania zgodnie z programem wykładu.
Zadania na listach będą bardzo zróżnicowane: niektóre będą wymagały napisania
dokumentu w LaTeX czy Markdown, inne programu w C++, jeszcze inne skryptu w
Bashu czy Pythonie. Niektóre zadania będą w formie krótkich (kilkanaście
minut) mini-referatów do zaprezentowania przed grupą. Nacisk zostanie położony
na jakość prezentacji i umiejętność przekazania wiadomości grupie. Niektóre
zadania mogą wymagać nauczenia się prostych narzędzi (np. do tworzenia
obrazków czy szyfrowania dokumentów). Ostatnią częścią pracowni będzie
projekt, którym będzie wymyślenie i przygotowanie własnego zadania
olimpijskiego lub przygotowanie własnego materiału edukacyjnego z zakresu
algorytmiki konkursowej.
Efektem ubocznym kursu ma być zbiór zadań, który wykorzystamy do wewnętrznego
konkursu dla zainteresowanych oraz wśród uczniów, dla których prowadzimy
zajęcia w liceach i gimnazjach.
Wymagania
=========
Zakłada się, że uczestnicy kursu mają obycie w tematach okołoalgorytmicznych
takie jak doświadczenie w startach w zawodach algorytmicznych. Ukończenie
kursu Algorytmów i Struktur Danych powinno być wystarczające.