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 świata zawodów algorytmicznych od strony "kuchni", 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ą.
Drugą częścią przedmiotu jest przygotowanie studentów do dydaktyki informatyki, szczególnie w szkołach podstawowych i liceach. Studenci poznają metody nauczania uczniów, a na ćwiczeniach będą prezentowali również własne pomysły i adaptacje metod z wykładu. Zainteresowane osoby uzyskają też informacje o tym jak włączyć się w działania edukacyjne w szkołach koordynowane przez naszą uczelnię.
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.
Drugą część stanowią podstawowe elementy dydaktyki
algorytmiki konkursowej: jak umiejętnie dzielić się swoją wiedzą z innymi studentami i młodszymi uczniami oraz jak przygotować dobrej jakości materiały
edukacyjne z tej dziedziny.
Ostatnie dwa wykłady stanowić będą przegląd wybranych bardziej zaawansowanych zagadnień dotyczących treści zaprezentowanych wcześniej, na zasadzie mini-referatów przygotowanych przez studentów.
Przykłady tematów:
* 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.
Lista tematów do wyboru jest o wiele szersza. Możliwe jest proponowanie własnych tematów.
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
=========
Ukończenie kursu Algorytmów i Struktur Danych powinno być wystarczające, choć nie jest wymaganiem koniecznym.