Zamiana formatu dat

Zadanie 12 z 13 · rozdział 23Trudność: 2 z 3regexstringgrupy

Treść zadania

Wczytaj tekst i zamień w nim każdą datę zapisaną w formacie DD.MM.RRRR na format RRRR-MM-DD, np. 05.03.2024 → 2024-03-05. Resztę tekstu pozostaw bez zmian.

Data to dokładnie: 2 cyfry, kropka, 2 cyfry, kropka, 4 cyfry (cyfry 0–9). Data nie może być częścią dłuższego słowa — tuż przed nią i tuż po niej nie może stać litera, cyfra ani _ (zob. \b w konwencjach rozdziału). Nie sprawdzaj, czy taki dzień istnieje: 31.02.2023 też zamieniamy.

Nie są więc datami np. 1.02.2024 (jednocyfrowy dzień), 01.02.20245 (pięciocyfrowy rok) ani x01.02.2024 (data przyklejona do litery).

Dane wejściowe

  • 1. linia: tekst

Dane wyjściowe

Jedna linia: tekst po zamianie (bez zmian, jeśli nie zawiera żadnej daty).

Uwagi

  • Fragmenty wzorca ujęte w nawiasy ( ) to grupy — są numerowane od 1 w kolejności nawiasów otwierających. W napisie zastępczym re.sub() odwołujesz się do nich przez \1, \2… albo \g<1>, \g<2>…:
re.sub(r"(\w+) (\w+)", r"\2 \1", "Ala Kowalska")   # 'Kowalska Ala'
  • Postać \g<1> przydaje się, gdy zaraz po odwołaniu stoi cyfra: \g<1>0 to grupa 1 i znak 0, a \10 oznaczałoby grupę 10.

Przykład

Wejście
Spotkanie przeniesiono z 05.03.2024 na 12.03.2024.
Wyjście
Spotkanie przeniesiono z 2024-03-05 na 2024-03-12.

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 23

Poniższe zadania polegają na wczytywaniu danych ze standardowego wejścia (stdin) i wypisywaniu wyniku na standardowe wyjście (stdout). Rozwiązuj je za pomocą wyrażeń regularnych (moduł re).
Każde zadanie jest osobnym, niezależnym programem.

Konwencje wspólne:

  • Każda wartość wejściowa znajduje się w osobnej linii — wczytuj je dokładnie w podanej kolejności.
  • Tekst wielowierszowy jest poprzedzony linią z liczbą jego wierszy n — wczytaj go, wywołując input() n razy.
  • Dla wartości logicznych wypisuj dokładnie Prawda lub Fałsz.
  • Wielkość liter ma znaczenie, chyba że zadanie mówi inaczej.
  • Słowo to najdłuższy ciąg znaków dopasowywanych przez \w, czyli liter (także polskich), cyfr i znaku podkreślenia _. Każdy inny znak — spacja, interpunkcja, myślnik — rozdziela słowa, np. biało-czerwona to dwa słowa: biało i czerwona. Granicę słowa w wyrażeniu regularnym oznacza \b.
  • Program nie wypisuje komunikatów typu „Podaj tekst:”. 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
Urodziłem się 01.01.2000 r.
Oczekiwane wyjście
Urodziłem się 2000-01-01 r.

Test 2

Nie uruchomiono
Wejście
Dzisiaj nic się nie dzieje.
Oczekiwane wyjście
Dzisiaj nic się nie dzieje.

Test 3

Nie uruchomiono
Wejście
Wersja 1.2.2024, telefon 123.45.67890, termin 7.03.2024
Oczekiwane wyjście
Wersja 1.2.2024, telefon 123.45.67890, termin 7.03.2024

Test 4

Nie uruchomiono
Wejście
kod ABC12.12.2024 oraz 12.12.2024x i (24.12.2024)
Oczekiwane wyjście
kod ABC12.12.2024 oraz 12.12.2024x i (2024-12-24)

Test 5

Nie uruchomiono
Wejście
31.02.2023 i 99.99.9999
Oczekiwane wyjście
2023-02-31 i 9999-99-99

Test 6

Nie uruchomiono
Wejście
01.02.20245 to nie data, ale 01.02.2024 tak
Oczekiwane wyjście
01.02.20245 to nie data, ale 2024-02-01 tak

Test 7

Nie uruchomiono
Wejście
05.03.2024-06.03.2024
Oczekiwane wyjście
2024-03-05-2024-03-06

Test 8

Nie uruchomiono
Wejście
Termin_01.02.2024 minął
Oczekiwane wyjście
Termin_01.02.2024 minął
Uruchom z własnymi danymi