Przygotowanie rozwiązania zadania:
- Znaleźć zadanie na stronie olimpiady juniorów:
- https://oij.edu.pl/ - strona olimpiady
- https://sio2.mimuw.edu.pl/c/oij19-1/p/ - zadania 19 olimpiady, jesień 2024
- https://oij.edu.pl/zbior_zadan/ - zadania z poprzednich lat
- Stworzyć oddzielny folder dla tego zadania.
- Resztę kroków wykonujemy i zapisujemy w folderze zadania.
- Pobrać treść zadania (pdf)
- Przykład będzie oparty o zadanie Różnorodny Ciąg ze zbioru:
- Stworzyć pusty plik rozwiązania (main.py)
- W pliku rozwiązania
- stworzyć funkcję logującą
- zalogować że plik się uruchamia
- Sprawdzić że plik rzeczywiście uruchamia się i loguje to co nakazaliśmy
- Z konsoli cmd:
- python main.py
- ewentualnie python3 main.py
- poprawić ewentualne błędy, dodać brakujące biblioteki
- Stworzyć pliki z przykładowymi danymi testowymi
- Zwykle zadanie ma trzy przykładowe testy. Tworzymy pliki tekstowe:
- test-0.txt
- test-1.txt
- test-2.txt
- Wypełniamy danymi z treści zadania. W przykładowym zadaniu dane są opisane jako:
- Wejście dla testu cia0a
- Wejście dla testu cia1a
- Wejście dla testu cia2a
- Stworzyć plik tekstowy .bat do uruchamiania testu numer 0.
- test-0.bat
- W środku jedna linijka
- python main.py < test-0.txt
- Linia ta oznacza uruchomienie skryptu rozw.py i skierowaniu na jego wejście danych z pliku test-0.txt
- Pamiętaj o zmianie rozszerzenia pliku z .txt na .bat.
- Najlepiej skopiować plik z poprzednich zadań i zaadaptować.
- Uruchom test-0.bat z konsoli i ewentualnie popraw.
- Stwórz pozostałe pliki testów:
- test-1.bat
- test-2.bat
- sprawdź czy się uruchamiają.
- W pliku main.py dodaj wczytywanie danych wejściowych.
- Wczytaj wszystkie linie wejścia
- Wypisz co wczytałeś.
- Zapisz wartości na zmiennych
- Podziel zbiory na tablice.
- Zamień napisy na liczby tam gdzie dane mają znaczenie liczbowe.
- Wypisz wszystkie wczytane dane
- Postaraj się aby było co wypisujesz bez zaglądania do kodu.
- Wypisuj wartości oraz nazwy zmiennych.
- W pliku main.py dodaj wypisywanie wyniku.
- Wprost wypisz wynik podpowiadany w pierwszym teście.
- Sprawdź czy dane z wszystkich przykładowych testów wczytują się poprawnie.
Oto plik main.py dla zadania z 2023 roku. Możesz oprzeć się tworząc rozwiązanie swojego zadania.
import sys # funckja logująca którą można łątwo wyciszyć # poprzez zakomentowanie dwóch lini def info(data): import logging logging.warning(data) pass # gdy moduł import logging jest niedostępny # możemy logować też tak # jest to jednak trudniej zapamiętać def info2(data): print(data, file=sys.stderr) pass # warto widzieć że program się w ogóle uruchomił info("start") info2("start2") # warto dodać tę linię # gdybyśmy nie podali pliku z danymi wejściowymi program zatrzyma się # będziemy widzieć w consoli co się dzieje info("wczytuje wejscie") line = input() # wypisuję dane tuż po wczytaniu - łatwiej wtedy rozwiązać problemy info("line1: "+line) # n ma być liczbą n = int(line) # ważne żeby na diagnostyce było widać nazwę zmiennej. Stąd "n: " info("n: "+str(n)) line = input() info("line2: "+line) a_str = line.split(' ') info("a_str: "+str(a_str)) # a_str to tablica napisów, a potrzezbujemy liczby a = [] for cyfra in a_str: a.append(int(cyfra)) # teraz a to tablica napisów info("a: "+str(a)) # to jest informacja dla nas aby łatwiej zorientować się gdzie jesteśmy w kodzie info("info koniec wczytywania danych") info("koniec") print(8)
Tak wygląda mój przygotowany folder:
Analiza zadania
Poprzednie kroki, przygotowanie testów i wczytywanie wyglądają dla każdego zadania podobnie.
Kolejnym etapem jest analiza samego zadania i rozwiązanie podanych przykładów na kartce.
Kolejnym etapem jest analiza samego zadania i rozwiązanie podanych przykładów na kartce.
- Weź kartkę i długopis!!!
- Przeczytaj jeszcze raz zadanie
- Czy wiesz co oznaczają dane wejściowe?
- Czy wiesz co ma być na wyjściu?
- Przeanalizuj dane z pierwszego przykładu
- Czasem jest dołączony rysunek.
- Rozumiesz go?
- Czy umiesz zrobić rysunki dla pozostałych przykładów?
- Zrób je.
- Jeśli nie ma rysunku samemu zrób.
- Może to być szkic figur geometrycznych
- albo graf przejść między liczbami
- albo tableka
- ...
- Spróbuj rozwiązać pierwszy przykład.
- Twój wynik zgadza się z wynikiem przykładu.
- Spróbuj rozwiązać pozostałe przykłądy
- Może któryś jest łatwiejszy
- Może któryś zawiera "podchwytliwe dane".
Comments
Post a Comment