Jeśli chcesz zrobić zadanie algorytmiczne czy programistyczne, które będzie umieszczone w systemie Szkopuł
https://szkopul.edu.pl/problemset/
to
- Stwórz paczkę jak opisano poniżej
- Umieść paczkę na współdzielonym zasobie (np. Google Drive)
- 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
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