Dzień tygodnia dla daty (Zeller)

Zadanie 8 z 9 · rozdział 3Trudność: 2 z 3algorytmyZellermapowaniedaty

Treść zadania

Wczytaj datę d, m, y i wyznacz nazwę dnia tygodnia, używając kongruencji Zellera dla kalendarza gregoriańskiego.

Kroki:

  1. Jeśli $m \le 2$, potraktuj styczeń i luty jako 13. i 14. miesiąc poprzedniego roku: $m = m + 12$, $y = y - 1$.
  2. Oblicz:
    • $K = y \bmod 100$ (rok w stuleciu),
    • $J = \lfloor y / 100 \rfloor$ (stulecie),
    • $h = \left(d + \left\lfloor \frac{13(m+1)}{5} \right\rfloor + K + \left\lfloor \frac{K}{4} \right\rfloor + \left\lfloor \frac{J}{4} \right\rfloor + 5J\right) \bmod 7$.
  3. Zamień h na dzień tygodnia:
    • 0 → Sobota
    • 1 → Niedziela
    • 2 → Poniedziałek
    • 3 → Wtorek
    • 4 → Środa
    • 5 → Czwartek
    • 6 → Piątek

Dane wejściowe

3 liczby całkowite, każda w osobnej linii: d, m, y.

Dane wyjściowe

Jedna linia: nazwa dnia tygodnia — dokładnie jedna z: Poniedziałek, Wtorek, Środa, Czwartek, Piątek, Sobota, Niedziela.

Ograniczenia

  • Podana data jest poprawna (nie musisz jej sprawdzać).
  • $1 \le y \le 9999$

Uwagi

  • W Pythonie $\lfloor a / b \rfloor$ to a // b, a $a \bmod b$ to a % b.

Przykład

Wejście
9
10
2020
Wyjście
Piątek

$m = 10$, $y = 2020$, więc $K = 20$, $J = 20$, $h = (9 + 28 + 20 + 5 + 5 + 100) \bmod 7 = 167 \bmod 7 = 6$, czyli piątek.

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 3

Zadania w tym rozdziale dotyczą walidacji i obliczeń na datach w kalendarzu gregoriańskim.

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Liczby wczytuj z osobnych linii, w kolejności z opisu. Data jest zawsze podawana jako trzy liczby: dzień, miesiąc, rok.
  • Komunikaty wypisuj dokładnie jak w treści (kropki, polskie znaki, wielkość liter, spacje).
  • Jeśli zadanie mówi „nie wypisuj nic” — program kończy się bez żadnego wyjścia.
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”. Tekst podany w input("…") jest ignorowany przez sprawdzarkę.
  • We wszystkich zadaniach obowiązuje kalendarz gregoriański (także dla lat sprzed 1582 roku). Rok jest przestępny, gdy jest podzielny przez 4 i nie jest podzielny przez 100, albo gdy jest podzielny przez 400 (np. 2024 i 2000 są przestępne, a 2023 i 1900 — nie). Luty ma w roku przestępnym 29 dni, a w nieprzestępnym 28.

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
29
2
2020
Oczekiwane wyjście
Sobota

Test 2

Nie uruchomiono
Wejście
4
7
2023
Oczekiwane wyjście
Wtorek

Test 3

Nie uruchomiono
Wejście
1
1
2000
Oczekiwane wyjście
Sobota

Test 4

Nie uruchomiono
Wejście
1
1
1900
Oczekiwane wyjście
Poniedziałek

Test 5

Nie uruchomiono
Wejście
1
1
2023
Oczekiwane wyjście
Niedziela

Test 6

Nie uruchomiono
Wejście
1
3
2000
Oczekiwane wyjście
Środa

Test 7

Nie uruchomiono
Wejście
25
12
2025
Oczekiwane wyjście
Czwartek

Test 8

Nie uruchomiono
Wejście
31
1
2024
Oczekiwane wyjście
Środa
Uruchom z własnymi danymi