Projekt z przedmiotu Algorytmy dla Problemów Trudnych Obliczeniowo


Zadanie: Krysztaly

Tresc zadania znajduje sie w pliku:

Sprawy organizacyjne

Prowadzący przedmiot:

  • dr hab. inż. Piotr Faliszewski
  • dr inż. Marcin Kurdziel
  • dr inż. Marek Gajecki

Terminy oddania projektu:

  • Pierwszy termin: 16 czerwca 2017r, godz 23.59.
  • Drugi termin: 10 wrzesnia 2017, godz 23.58.
  • Trzeci termin: 17 września 2017, godz 23.59.
Zaliczenie projektu w terminie późniejszym niż pierwszy skutkuje ocena końcową z przedmiotu nie wyższą niż 3.0.

Do wykonania w ramach projektu:

  • Należy napisać program, który rozwiązuje zadanie opisane poniżej oraz wysłać go do systemu arbitrażowego dla zadania.
  • Należy także dostarczyć dokumentacje programu. Dokumentacja nie może przekraczać 8 stron tekstu czcionką 11pt, przy rozsądnych marginesach. Dokumentacja powinna zawierać wyłącznie informacje na temat użytych algorytmów i pomysłów rozwiązania zadania, a nie szczegółów technicznych implementacji. Dokumentacja istotnie krótsza wcale nie musi być wadą projektu.

Języki programowania: Jedyne dwa dopuszczalne języki programowania to C oraz C++/C++11 (obecnie zainstalowany kompilator to gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3).

Zasoby/współbieżność: Programy nie mogą odwoływać się do systemu plików, nie mogą próbować nawiązywać połączeń sieciowych, być wielowątkowe, wieloprocesorowe, itp. Programy powinny jedynie wczytać ze standardowego wejscia opis zadania, wykonać obliczenia w pamięci i wypisać wynik na standardowe wyjście. Złamanie tych zasad, w szczególności odwołania do sieci oraz próby hackowania systemu arbitrażowego, mogą skutkować brakiem zaliczenia przedmiotu. (Istnieje takze mozliwosc, ze taka osoba bedzie musiala wysluchac bezposrednio od prowadzacych jak bardzo nas rozczarowala.)

Oceny:

  • Na Państwa ocenę największy wpływ ma jakość działania zgłoszonego programu, a w drugim rzędzie jakość dokumentacji. Wyróżniająca się dokumentacja podnosi ocenę z projektu o 0.5 stopnia. Wyjątkowa zła dokumentacja (w tym nieistniejąca) obniża ocenę o 0.5 stopnia (w przypadku zaliczenia w terminie innym niż pierwszy dokumentacja, lub jej brak, nie wpływa na ocenę).
  • Programy będą oceniane na podstawie liczby plansz, które będą w stanie rozwiązać. Dla każdej planszy będzie zadane ograniczenie czasowe (od kilku do kilkunastu sekund) oraz dostępna ilość pamięci (dokładne dane zostaną udostępnione później).
  • Aby uzyskać zaliczenie, Państwa program musi być w stanie rozwiązywać zestaw podstawowych testów, który udostępnimy Państwu przez system arbitrażowy.
  • Aby uzyskać wyższą ocenę, program musi być w stanie rozwiązywać odpowiednio trudniejsze testy. Oceny powstaną na podstawie porównania jakości programów.
  • Kod źródłowy państwa programów nie jest oceniany, ale może być przeglądany, więc proszę stosować komentarze i wcięcia.
  • W przypadku wykrycia plagiatu, obie zaangażowane osoby otrzymują ocenę 2.0 z wszystkich trzech terminów.

Wymagania na ocenę 3.5

Plansze na oceny 3.5 będą ograniczone do rozmiarów 6x6 (tj., dopuszczalne są, na przykład, plansze o rozmiarach 3x3, 6x6, 1x1, ale---na 3.5---nie będzie plansz o rozmiarach 7x7, 128x128 itp.).

Dodatkowe informacje, programy i dane

Dodatkowe programy i informacje zostana udostepnione pozniej. Program sedziego (judge.py) został zaimplementowany w języku Python, dla interpreterów z rodziny 2.7. Oprocz sedziego dostepny jest tez program do wizualizacji labiryntow (view.py), ktory dla danego pliku wejsciowego generuje plik PNG z zaznaczona trasa promienia.

Wywołanie sędziego:

  python judge.py input output
gdzie input to opis planszy z zadaniem, a output to opis planszy z rozwiązaniem.

Wywoalnie przegladarki plansz:

  python view.py output
  eog output.png
gdzie output to plik z rozwiazaniem (albo i nie).

System arbitrażowy

System arbitrażowy dostępny jest pod następującymi adresami: