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.mhcode


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.mhcode
Daniel Olkowski

Liczba komentarzy: 1

  • Adam

    W razie wątpliwości co do e-maila, na który wysyłać pliki z paczkami z zadaniami to na ten: kontakt oki org pl

Dodaj komentarz