Regulamin zawodów

  1. Cel zawodów

    Zawody są okazją do zademonstrowania i doskonalenia umiejętności w zespołowym rozwiązywaniu problemów informatycznych. Umożliwiają one nawiązanie kontaktów między studentami z różnych ośrodków akademickich. Pozwalają poznać specyfikę tego rodzaju rywalizacji oraz pomagają przygotować się do ewentualnego uczestnictwa w ACM International Collegiate Programming Contest.

    Zawody wyłaniają najlepszą akademicką drużynę w programowaniu zespołowym w Polsce.

  2. Uczestnictwo w zawodach
    1. W zawodach biorą udział zespoły (drużyny), składające się maksymalnie z trzech osób - studentów jednej uczelni w Polsce.
    2. W zawodach nie mogą brać udziału osoby, które ukończyły już jakiekolwiek studia w kraju lub za granicą (z wyjątkiem studiów inżynierskich i licencjackich) lub które już dwukrotnie uczestniczyły w finałach ACM International Collegiate Programming Contest.
    3. Potwierdzeniem spełnienia przez członków zespołów warunków uczestnictwa jest zaświadczenie wystawione przez uczelnię, z której pochodzą studenci.
    4. Zgłoszenia drużyn do zawodów dokonują uczelnie wyższe. Każda uczelnia ma prawo wystawić do zawodów jeden zespół, który ma automatycznie zagwarantowane prawo startu. Ponadto, uczelnie mogą zgłosić gotowość wystawienia większej liczby zespołów, o których przyjęciu, w miarę wolnych miejsc, zadecyduje Komitet Organizacyjny.
    5. Każdy zespół wyznacza spośród siebie kapitana, który podczas zawodów będzie kontaktował się z organizatorami.
  3. Przebieg zawodów
    1. Zawody trwają dwa dni.
    2. Pierwszy dzień zawodów jest przeznaczony na aklimatyzację uczestników i sesję próbną, w czasie której uczestnicy będą mogli zapoznać się ze środowiskiem programistycznym (sieć komputerowa, kompilatory, tryb oceniania zadań itp.).
    3. Właściwe zawody odbywają się w drugim dniu, trwają 5 godzin. Komitet Organizacyjny w porozumieniu ze Składem Sędziowskim ma prawo przedłużyć czas rozwiązywania zadań w przypadku wystąpienia nieprzewidzianych trudności.
    4. Zawody będą przeprowadzane w środowisku sieciowym. Sieć służy do przesyłania rozwiązań oraz do tworzenia wydruków kodu źródłowego. Używanie sieci do jakichkolwiek innych celów, np. zdalne logowanie, ssh, ftp, telnet i inne, jest zakazane i może skutkować usunięciem drużyny. Każdy zawodnik, który znajdzie lukę w systemie ochrony, jest zobowiązany powiadomić o tym niezwłocznie personel pomocniczy zawodów.
    5. Każdy zespół ma do dyspozycji zestaw komputerowy pracujący pod kontrolą systemu operacyjnego Linux wyposażony w kompilatory gcc, g++. Szczegółowa lista oprogramowania dostępnego podczas zawodów znajduje się w Ustaleniach technicznych.
    6. Zespołowi prezentuje się 8-12 zadań programistycznych, których rozwiązania należy przedstawić w językach C lub C++ (w sensie języków akceptowanych przez wyżej wymienione kompilatory). Zadania będą sformułowane w sposób niezależny od języka programowania.
    7. Zadania będą sformułowane w języku polskim.
    8. Zawodnicy mogą zgłosić fakt zaistnienia niejasności lub wystąpienia błędu w sformułowaniu zadania. Jeśli sędziowie zawodów uznają, że uwaga jest zasadna, zespół otrzyma stosowne wyjaśnienie. Sędziowie mogą również zadecydować o udostępnieniu wyjaśnienia wszystkim zespołom.
    9. Każde rozwiązanie musi składać się z pojedynczego pliku z kodem źródłowym w dowolnym z dostępnych języków programowania. Program nie może korzystać z plików dodatkowych oraz nie może tworzyć plików tymczasowych.
    10. Uczestnicy mogą korzystać z własnych materiałów: słowników, książek, wydruków programów, notatek. Nie jest dozwolone korzystanie z tekstów zapisanych w formie elektronicznej (np. pamięć USB, CD/DVD), z kalkulatorów ani innych przenośnych urządzeń elektronicznych, takich jak telefon komórkowy, notebook itp.
    11. Zawodnikom w czasie zawodów wolno komunikować się jedynie z członkami swojej drużyny, wyznaczonym personelem pomocniczym oraz sędziami. Każdy kontakt z innymi osobami (w szczególności z zawodnikami innych drużyn lub trenerami) jest zabroniony pod groźbą dyskwalifikacji. Personel pomocniczy może pomagać uczestnikom w przypadku wystąpienia problemów związanych ze środowiskiem programistycznym.
    12. W trakcie zawodów, przez pierwsze cztery godziny trwania sesji, do publicznej wiadomości są na bieżąco podawane aktualne wyniki drużyn. Przez ostatnią godzinę informacje o wynikach sprawdzania rozwiązań swojej drużyny otrzymują tylko zawodnicy.
    13. Po zakończeniu zawodów zostaną przedstawione oficjalne wyniki.
  4. Komisja sędziowska zawodów
    1. Skład sędziowski i Sędziego Głównego wyznacza Przewodniczący Komitetu Sterującego w porozumieniu z Przewodniczącym Komitetu Organizacyjnego.
    2. Skład sędziowski jest upoważniony do zmiany regulaminu w chwili zajścia nieprzewidzianych wypadków. Decyzje składu sędziowskiego są ostateczne i nie podlegają apelacji.
    3. Sędziowie zawodów są odpowiedzialni za ocenę prawidłowości rozwiązań zadań. Sędzia Główny, konsultując decyzje z pozostałymi sędziami, odpowiada za wyłonienie zwycięzców.
  5. Kryteria i tryb oceny rozwiązań zadań
    1. Drużyny przedstawiają sędziom rozwiązania zadań w czasie trwania zawodów.
    2. Rozwiązania zadań są oceniane przez sędziów na bieżąco. Każde rozwiązanie przedstawione do oceny jest albo akceptowane, albo odrzucane, a drużyna jest powiadamiana o tej ocenie. Do przeprowadzenia oceny rozwiązań używane będą dane wejściowe, których format opisany będzie w treściach zadań. Każde rozwiązanie będzie uruchomione jeden lub więcej razy dla różnych danych wejściowych i zostanie zaakceptowane tylko wtedy, gdy dla wszystkich tych danych udzieli poprawnej odpowiedzi i poprawnie zakończy swoje wykonanie. Dodatkowo, każde uruchomienie objęte jest ograniczeniem czasu działania oraz ograniczeniem ilości dostępnej pamięci. Przekroczenie tych ograniczeń skutkuje odrzuceniem rozwiązania.
    3. Przyczyna odrzucenia rozwiązania jest określana jednym z następujących komunikatów:
      • błąd kompilacji (compile error),
      • błąd wykonania lub przekroczenie limitu pamięci (runtime error),
      • przekroczony limit czasu (time limit exceeded),
      • próba wykonania niedozwolonej operacji (security violation),
      • błędna odpowiedź (wrong answer),
      • wysłano rozwiązanie zadania wcześniej zaakceptowanego (ignored),
      • przekroczony limit pamięci (memory limit exceeded).
    4. Jeżeli rozwiązanie nie zostanie zaakceptowane, drużyna może przedstawić kolejną wersję rozwiązania.
    5. W przypadku wystąpienia komunikatu security violation, spowodowanego próbą wpłynięcia na działanie systemu, drużyna może zostać zdyskwalifikowana.
    6. Drużyny są szeregowane na podstawie liczby poprawnie rozwiązanych zadań. O kolejności drużyn posiadających tę samą liczbę rozwiązanych zadań decyduje łączny czas rozwiązywania zadań. Za czas rozwiązania zadania przyjmuje się czas, jaki upłynął od początku zawodów do momentu przedstawienia poprawnego rozwiązania, powiększony o karę 20 minut za każde przedstawienie niezaakceptowanego rozwiązania. Łączny czas rozwiązywania zadań jest obliczany tylko na podstawie zaakceptowanych rozwiązań - kara związana z nierozwiązanymi zadaniami nie ma wpływu na wynik drużyny.
    7. Rozwiązania niekompilujące się (komunikat compile error) i zignorowane (komunikat ignored) nie powodują naliczenia 20-minutowej kary czasowej.

Ustalenia techniczne

  1. Polecenia używane do kompilacji rozwiązań (np. zadania a):
    • Dla c: gcc -O2 -static a.c -lm
    • Dla cpp: g++ -O2 -static a.cpp -lm -std=gnu++0x
  2. Do kompilowania rozwiązań używany będą kompilatory z GCC 4.6.3.
    Skompilowane programy będą uruchamiane w 32-bitowym systemie Linux.
  3. W rozwiązaniach zabronione jest używanie wstawek asemblerowych.
  4. Ograniczenia:
    • kod źródłowy rozwiązania nie może przekraczać 100 KB, a kod wykonywalny 10 MB,
    • czas kompilacji rozwiązania nie może przekraczać 30 s,
    • wielkość pamięci operacyjnej dostępnej programom będzie podana w treściach zadań; dotyczy ona sumarycznego zapotrzebowania na pamięć, a więc zawiera m.in. rozmiar kodu wykonywalnego, stosu, sterty itp.,
    • limity czasowe związane z poszczególnymi zadaniami nie będą ujawniane w trakcie zawodów.
  5. Rozwiązania powinny:
    • składać się z jednego pliku źródłowego,
    • czytać dane ze standardowego wejścia, zapisywać wynik na standardowe wyjście,
    • kończyć działanie kodem wyjścia 0 (inne kody wyjścia uznawane są za błąd wykonania).
  6. Rozwiązania nie mogą:
    • otwierać jakichkolwiek plików,
    • tworzyć nowych procesów,
    • korzystać z funkcji sieciowych,
    • korzystać z zewnętrznych bibliotek (np. crt, graph),
    • uruchamiać innych programów.
  7. Ograniczenia czasu i ilości dostępnej pamięci są przypisane do zadań, tj. będą takie same w trakcie wszystkich uruchomień rozwiązań danego zadania.
  8. Jeżeli rozwiązanie nie zostanie zaakceptowane, drużyna otrzyma komunikat o błędzie dotyczącym pierwszego uruchomienia, w którym rozwiązanie nie zadziałało poprawnie.
  9. Komputery zawodnicze będą wyposażone w system operacyjny Ubuntu Linux 12.04 z następującym oprogramowaniem:
    • kompilatory: gcc/g++ (wersja 4.6),
    • edytory: mcedit, vi/vim, emacs, gedit, gvim,
    • inne: bc, gdb, man, mc,
    • dokumentację biblioteki STL.