Wprowadzenie do Linuksa
Mamy świadomość, że II etap Olimpiady dla części z Was może być jednym z pierwszych kontaktów z Linuksem. Z myślą o tych osobach powstał ten krótki podręcznik, który mamy nadzieję pomoże Wam odnaleźć się w tym środowisku.
Przygotowaliśmy także krótki tutorial wideo, dostępny pod adresem https://www.youtube.com/watch?v=LIESFnJ_PI4, pokazujący wszystkie przydatne komendy (także opisane poniżej), dostępne w środowisku. Zapraszamy do obejrzenia go przed zawodami.
Specyfikacja środowiska dostępna jest w dokumencie Wybrane polecenia.
Uwaga. We wszystkich poniższych komendach oraz nazwach plików wielkość liter ma znaczenie!
Pisanie programów
Do pisania swojego kodu możesz wykorzystać jedno z dostępnych środowisk programistycznych takich jak Geany czy Code::Blocks. Aby uruchomić dowolne z nich wybierz z menu Programy podmenu Programowanie. Na początek polecamy użycie Geany.
Uwaga. Środowiska te mozna zainstalować także na Windowsie (bez instalowania całej maszyny wirtualnej). Geany dostępne jest do pobrania pod adresem https://www.geany.org/, natomiast Code::Blocksa można znaleźć na stronie https://www.codeblocks.org/. Do środowisk na Windowsie należy osobno zainstalować kompilator, bądź interpreter. Dla C++ można pobrać kompilator TDM-GCC (https://jmeubank.github.io/tdm-gcc/download/), natomiast dla Pythona dostępny jest interpreter z oficjalnej strony: https://www.python.org/downloads/.
Do tworzenia swoich rozwiązań możesz też wykorzystać proste edytory tekstowe takie jak Gedit czy Kate. Znajdziesz je w menu Programy, w podmenu Akcesoria.
Terminal
W środowisku Linux ważnym narzędziem jest terminal. Aby go uruchomić, z menu Programy wybierz Emulator terminala albo po prostu kliknij odpowiednią ikonkę na pasku.
Po uruchomieniu będziesz w swoim folderze domowym czyli /home/zawodnik
.
- Aby przejść do podfolderu wpisz:
cd nazwa_podfolderu
- Aby wrócić do folderu nadrzędnego wpisz:
cd ..
- W każdym momencie możesz sprawdzić w jakim folderze się znajdujesz:
pwd
Kompilacja dla programów w języku C++
Aby skompilować swój program, w terminalu wejdź do folderu, w którym zapisałeś swoje rozwiązanie (załóżmy, że nazwałaś/eś je nazwapliku.cpp
i uruchom poniższą komendę:
make nazwapliku
albo
g++ -O3 -static -o nazwapliku nazwapliku.cpp -std=c++17
W wyniku jej działania, w folderze, w którym się znajdujesz, powstanie plik o nazwie nazwapliku
.
W przypadku tej drugiej możliwości możesz rozważyć dodanie flagi kompilatora -Wall
. Jej użycie spowoduje bardziej szczegółowe wypisywanie ostrzeżeń podczas kompilacji co pozwala odnaleźć wiele błędów.
Jeśli swój kod piszesz w środowisku programistycznym takim jak Geany czy Code::Blocks to do kompilacji możesz użyć wbudowanej w niego opcji (np. w Geany wystarczy wybrać z menu Zbuduj opcję Zbuduj).
Uruchamianie programów
Aby uruchomić swoje rozwiązanie uruchom terminal oraz wejdź do folderu, w którym zapisałeś swój kod. Dla osób korzystających z języka C++, jeśli tego wcześniej nie zrobiłeś, najpierw skompiluj rozwiązanie.
- Dla skompilowanych programów w języku C++ wpisz
./nazwaprogramu
aby uruchomić swój program. Z kolei aby uruchomić program napisany w Pythonie wystarczy użyć:
python3 nazwaprogramu.py
Aby zakończyć uruchomienie programu, wcisnij ctrl+c
.
- Aby uruchomić swój program oraz przekierować zawartość pliku
plik_testowy.in
na standardowe wejście użyj:
./nazwaprogramu < plik_testowy.in
lub
python3 nazwaprogramu.py < plik_testowy.in
- Aby uruchomić swój program, przekierować zawartość pliku
plik_testowy.in
na standardowe wejście oraz wynik działania programu zapisać do plikuwynik.out
użyj:
./nazwaprogramu < plik_testowy.in > wynik.out
bądź
python3 nazwaprogramu.py < plik_testowy.in > wynik.out
- Aby uruchomić swój program w wirtualnym środowisku emulującym działanie procesora (w podobnym środowisku Jury będzie oceniać rozwiązania) i zmierzyć czas jego wykonania, użyj następującego polecenia:
oiejq ./nazwaprogramu < plik_testowy.in > wynik.out
albo
oiejq /usr/bin/python3 nazwaprogramu.py < plik_testowy.in > wynik.out
Zwróć uwagę, że w tej ostatniej komendzie wymagana jest pełna ścieżka do Pythona.
Testowanie
Aby przetestować swój program na testach przykładowych możesz użyć skryptu ./ocen
. W tym celu:
- zapisz swoje rozwiązanie w folderze
/home/zawodnik/rozw
z nazwą odpowiadającą trzyliterowemu kodowi zadania i rozszerzeniem odpowiadającym językowi, w którym piszesz - w terminalu wejdź do ww. folderu
- uruchom komendę
./ocen zadanie
używając trzyliterowego kodu zadania (pisanego małymi literami!). Na przykład dla zadania Serca (ser), plik z rozwiązaniem powinien znajdować się w pliku ser.cpp
lub ser.py
, a następnie należy wpisać:
./ocen ser
Komenda ta kompiluje i uruchamia rozwiązanie wybranego zadania na testach przykładowych.
Wysyłanie rozwiązań
Poza wysyłaniem rozwiązań przez przeglądarkę, możesz także użyć skryptu submit
.
Jeżeli Twoje zadanie jest zapisane jako abc.cpp
, bądź abc.py
, gdzie abc
jest trzyliterowym kodem zadania podanym w treści zadania,
wystarczy, że wpiszesz:
submit abc.cpp
bądź
submit abc.py
Możesz także wysłać zadanie nazwane inaczej, ale musisz wcześniej podać trzyliterowy kod zadania, na przykład:
submit abc mojkod.cpp
albo
submit abc mojkod.py
Wyśle odpowiednio mojkod.cpp
bądź mojkod.py
do zadania abc
.
Skrypt submit
działa także w przypadku awarii sieci; wówczas rozwiązanie zostaje automatycznie dostarczone do SIO,
gdy komputer odzyska łączność z siecią. W szczególności polecamy używać skryptu submit pod koniec zawodów,
kiedy strona WWW może mieć opóźnienia spowodowane dużym obciążeniem.