Posortuj adresy IP z pliku

Zadanie 5 z 15 · rozdział 20Trudność: 1 z 3filessortlist

Treść zadania

Wczytaj ścieżkę pliku tekstowego, w którym każdy niepusty wiersz zawiera jeden adres IPv4 — cztery liczby od 0 do 255 oddzielone kropkami, np. 192.168.1.10. Wypisz wszystkie adresy posortowane rosnąco według wartości liczbowych: najpierw według pierwszej liczby, przy równych — według drugiej, potem trzeciej i czwartej.

Zwykłe porównywanie napisów da złą kolejność: "192.168.1.10" < "192.168.1.2", chociaż $10 > 2$.

Dane wejściowe

  • 1. linia: ścieżka pliku z adresami

Dane wyjściowe

  • Adresy w kolejności rosnącej, każdy w osobnej linii. Powtarzające się adresy wypisz tyle razy, ile razy występują w pliku.
  • Brak adresów. — jeśli plik nie zawiera żadnego adresu.
  • Plik nie istnieje. — jeśli podana ścieżka nie wskazuje istniejącego pliku.

Ograniczenia

  • Puste wiersze pomiń. Wiersze z adresami nie zawierają spacji ani innych znaków.

Uwagi

  • Wygodnie jest sortować z kluczem: sorted(adresy, key=...), gdzie klucz zamienia adres na krotkę czterech liczb całkowitych.

Przykład

Pliki przed uruchomieniem
  • adresy_ip.txt
    192.168.1.10
    10.0.0.1
    192.168.1.2
    172.16.0.5
Wejście
adresy_ip.txt
Wyjście
10.0.0.1
172.16.0.5
192.168.1.2
192.168.1.10
Zasady obowiązujące w rozdziale 20

Poniższe zadania polegają na wczytywaniu danych ze standardowego wejścia (stdin), wykonywaniu operacji na plikach i folderach oraz wypisywaniu wyniku na standardowe wyjście (stdout).
Każde zadanie jest osobnym, niezależnym programem.

Konwencje wspólne:

  • Program działa na plikach w katalogu roboczym, czyli w folderze, w którym jest uruchamiany. Wszystkie ścieżki na wejściu są względne wobec katalogu roboczego i używają / jako separatora, np. dane/raport.txt. Ścieżki wczytuj jako całe linie — mogą zawierać spacje.
  • Sprawdzarka przed każdym testem tworzy nowy katalog roboczy z plikami opisanymi w teście, uruchamia program, a potem sprawdza zarówno wypisany tekst, jak i zawartość plików.
  • W przykładach Pliki przed: pokazuje zawartość katalogu roboczego przed uruchomieniem programu, a Pliki po: — stan wybranych plików po jego zakończeniu. Każda linia to ścieżka pliku, a linie zaczynające się od | to kolejne wiersze jego treści. Ścieżka zakończona / to pusty folder, (rozmiar: N B) oznacza plik o rozmiarze N bajtów, a (usunięty) — plik, którego po zakończeniu programu ma już nie być.
  • Pliki tekstowe są zapisane w kodowaniu UTF-8 — otwieraj je przez open(sciezka, encoding="utf-8").
  • Rozszerzenie to końcówka nazwy pliku od ostatniej kropki (razem z nią), np. archiwum.tar.gz ma rozszerzenie .gz. Rozszerzenia porównuj bez względu na wielkość liter (.TXT to też .txt).
  • Listy plików wypisuj po jednym w linii, jako ścieżki względem podanego folderu z separatorem / (np. 2024/raport.txt), posortowane rosnąco tak, jak sortuje napisy funkcja sorted(). Na Windowsie ścieżki mają separator \ — zamień go na / (np. metodą Path.as_posix()).
  • Komunikaty dla przypadków brzegowych wypisuj dokładnie w podanej postaci, np. Folder nie istnieje., Plik nie istnieje., Brak plików.
  • Program nie wypisuje komunikatów typu „Podaj ścieżkę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
logi/ip.txt
Oczekiwane wyjście
1.0.0.1
1.1.1.1
8.8.4.4
8.8.8.8
Pliki przed uruchomieniem
  • logi/ip.txt
    8.8.8.8
    1.1.1.1
    8.8.4.4
    1.0.0.1

Test 2

Nie uruchomiono
Wejście
serwery.txt
Oczekiwane wyjście
2.0.0.0
10.0.0.3
10.0.0.20
10.0.0.100
10.0.1.1
Pliki przed uruchomieniem
  • serwery.txt
    10.0.0.20
    10.0.0.3
    10.0.1.1
    2.0.0.0
    10.0.0.100

Test 3

Nie uruchomiono
Wejście
ip.txt
Oczekiwane wyjście
9.255.255.255
100.2.3.4
100.2.3.4
100.10.0.0
Pliki przed uruchomieniem
  • ip.txt
    100.2.3.4
    
    9.255.255.255
    100.2.3.4
    100.10.0.0

Test 4

Nie uruchomiono
Wejście
jeden.txt
Oczekiwane wyjście
127.0.0.1
Pliki przed uruchomieniem
  • jeden.txt
    127.0.0.1

Test 5

Nie uruchomiono
Wejście
puste.txt
Oczekiwane wyjście
Brak adresów.
Pliki przed uruchomieniem
  • puste.txt(pusty plik)

Test 6

Nie uruchomiono
Wejście
puste wiersze.txt
Oczekiwane wyjście
Brak adresów.
Pliki przed uruchomieniem
  • puste wiersze.txt(pusty plik)

Test 7

Nie uruchomiono
Wejście
ip.txt
Oczekiwane wyjście
Plik nie istnieje.
Pliki przed uruchomieniem
  • adresy.txt
    1.2.3.4
Uruchom z własnymi danymi