System Szkopuł – Jak zrobić paczkę zadaniową?

System Szkopuł – Jak zrobić paczkę zadaniową?

Jeśli chcesz zrobić zadanie algorytmiczne czy programistyczne, które będzie umieszczone w systemie Szkopuł
https://szkopul.edu.pl/problemset/
to

  1. Stwórz paczkę jak opisano poniżej
  2. Umieść paczkę na współdzielonym zasobie (np. Google Drive)
  3. Wyślij informacje o paczce na adres wspolpraca znak małpy oki.org.pl


Dlaczego warto wymyślać zadania?
https://youtu.be/kTFfZY-Pn44?t=457
a. Dużo bardziej się rozwijamy
b. Pomagamy innym
c. Robimy pracę naukową – sami stawiamy problem i zastanawiamy się kiedy ma rozwiązania


Zwróć uwagę by:
1. Fabuła zadania była ciekawa
2. Treść zadania zrozumiała
3. Testy sprawdzały sytuacje krańcowe, małą i duża ilość danych wejściowych


Instrukcja stworzenia paczki
Oto przykładowa paczka: ciu.zip
Załączona paczka nazywa się ciu.zip
Słowo ciu (nazwa paczki) jest tu ważne i jest przedrostkiem wielu plików.


Cała paczka jest w jednym katalogu ciu (takim samym jak nazwa) i zawiera następujące podkatalogo oraz pliki:
config.yml – to najważniejszy plik opisujący całe zadanie
doc – podkatalog z treścią zadania
in – podkatalog z danymi wejściowymi
out – podkatalog z danymi wyjściowymi
prog – wzorcowy kod z rozwiązaniem zadania

Poniżej opisy wszystkich powyższych elementów


config.yml – plik konfiguracyjny
Składa się z 3 części:
1. tytul: tytuł zadania jaki będzie widoczny na szkopule
2. numery testów i wielkość pamięć jaką program może zużyć
3. numery testów i czas w ms jaki program otrzymuje by rozwiązać problem
Uwaga: Numery testów (0a, 0b, piszemy bez przedrostka ciu)

katalog doc
Tu znajduje się tylko jeden plik – treść zadania jako pdf
Nazwa pliku musi być nazwapaczkizad.pdf
czyli w naszym przypadku: ciuzad.pdf


katalog in
Pliki wejściowe które otrzymuje program który będzie sprawdzany.
Każdy plik wejściowy musi mieć następująca nazwę:
nazwapaczkinumer.in
Czyli w naszym przypadku:
 ciu0a.in
 ciu0b.in


katalog out
Pliki wyjściowe które sprawdzany program musi wygenerować. Jak sprawdzany program wygeneruje taki sam plik wyjściowy to otrzyma punkty.
Każdy plik wyjściowy musi mieć następująca nazwę:
 nazwapaczkinumer.out
Czyli w naszym przypadku:
 ciu0a.out
 ciu0b.out

Pliki wyjściowe odpowiadają analogicznym plikom wejściowym.
Na przykład
plik ciu0a.in odpowiada plikowi ciu0a.out
plik ciu0b.in odpowiada plikowi ciu0v.out


katalog prog
Znajduje się tam wzorcowy program C++ który służył do wygenerowania wejścia (katalog in) i wyjścia (katalog out).
Plik z kodem C++ musi mieć nazwę: nazwapaczki.cpp
Czyli w naszym przypadku: ciu.cpp


Co gdy chcę by było kilka poprawnych odpowiedzi?
Własna checkerka

Czasem chcemy ułożyć zadanie w którym jest kilka poprawnych odpowiedzi. Na przykład podaj układ wież na szachownicy 2×2 które się wzajemnie nie biją. Mamy 2 poprawne odpowiedzi.
Co wówczas.

Paczki szkopuł dopuszczają dodanie własnej checkerki. Checkerka to program w C++ który musi nazywać się nazwa_paczkichk.cpp. W naszym przypadku ciuchk.cpp gdyż nasza paczka nazywa się ciu.

Checkerka będzie uruchomiona przez szkopuł i otrzyma trzy parametry w linii komend (argv), odpowiednio: ścieżka pliku wejściowego testu, pliku z odpowiedzią użytkownika oraz pliku wyjściowego testu.

Na przykład otrzymamy na wejściu
a. plik in z informacją, że szachownica jest 2×2 (pierwszy plik argv)
b. wyjście użytkownika z jego układem wież (drugi plik argv)
c. wyjście (out) wzorcówki – być może będziemy chcieli użyć jakiś informacji  z przykładowego poprawnego rozwiązania  (trzeci plik argv)

Pierwsza linijka, którą wypisze checkerka ma być: OK lub WRONG (odpowiednio: odpowiedź udzielona przez użytkownika jest poprawna/niepoprawna)

Drugi wiersz to komentarz (np. Wypisany graf nie jest drzewem. albo Pomyliles sie o 0.5). Jeżeli nie chcemy wypisywać komentarza, to musimy wypisać pustą linijkę.

Trzeci wiersz to procent punktów (wartość jest brana pod uwagę tylko, jeżeli 1. linijka to OK, inaczej przydzielane jest 0% niezależnie od tej linijki). Powinna to być liczba całkowita z zakresu [0, 100]. Można ten wiersz pozostawić pusty – wypisać pusta linie – wtedy przyznane zostanie 100 punktów przewidzianych za dany test. Czyli jeśli chcemy by każdy test był tak samo i niezależnie traktowany przez checkerkę to trzeci wiersz wypisywany przez checkerkę powinien być 100 lub pusty.

Checkerka musi się znaleźć razem ze wzorcówką – w katalogu prog/


Pytania i odpowiedzi

> Czy jest instrukcja zrobienia paczki napisana przez właściciela szkopuł?
Tak:
https://github.com/sio2project/oioioi/wiki

> Czy limit pamięci podawany jest w KB?
Dokładnie

> Czy ten plik cpp w folderze prog będzie jakoś uruchamiany podczas sprawdzania?
Ten plik cpp nie będzie w ogóle używany.
Program zawodnika zostanie skompilowany i odpowiednie in i out porównane na podstawie jego programu
cpp jest jako archiwum użytej wzorcówki.
Ale musi być.

> Z którego c++ mam korzystać (w sensie 17, 14, 11)
Możesz używać dowolnej wersji c++

> Czy mam dostęp do bits/stdc++.h?
Oczywiście!

> Czy w folderze prog mogą być jeszcze inne programy? (np. Mój pythonowy generator testów, żeby nie pisać miliona wartości ręcznie – zapisuje efekt do pliku)?
W folderze prog musi być wzorcówka która się poprawnie kompiluje.
w formacie skrot_nazwy_zadania.cpp (u nas ciu.zip)
Ale mogą być tez inne dowolne rzeczy.

Dziękuję za każde zadanie!
Prześlij je na wspolpraca znak małpy oki.org.pl
Daniel Olkowski

Nie dodano jeszcze komentarza, rozpocznij dyskusję pierwszy.

Dodaj komentarz