Номер дня в дневнике
Условие
У Даши есть бумажный дневник привычек. Она пронумеровала все дни подряд, начиная с 1 января 1900 года.
Она помнит, что 01.01.1900 — понедельник.
По номеру дня N помоги восстановить, какая это дата и какой это день недели.
Календарь — обычный григорианский:
- год високосный, если делится на 400;
- или делится на 4, но не делится на 100.
Формат ввода Одно целое число N.
Формат вывода Выведи строку вида YYYY-MM-DD DDD, где DDD — одно из: Mon Tue Wed Thu Fri Sat Sun.
Ограничения
1 ≤ N ≤ 10^9- Учти, что по олимпиадным меркам это диапазон под 64-битные целые (int64). В Python это не проблема.
Пример Ввод:
1
Вывод:
1900-01-01 MonРазберись руками
День №1 — это самый первый день, с которого Даша начала нумерацию: 01.01.1900. Известно, что он был в понедельник, так что на примере можно руками проверить, как выбирать нужный случай и что именно выводить.
- Для N = 1: сколько дней прошло ПОСЛЕ 1900-01-01? (То есть сдвиг относительно первого дня.)
- Если 1900-01-01 — это Mon, то при сдвиге 0 какой будет день недели?
- При сдвиге 0 дней от даты 1900-01-01 какая получится дата?
Идея: Сначала превращаешь номер дня в «сдвиг в днях» относительно 1900-01-01. По этому сдвигу отдельно находишь день недели (он повторяется циклом в 7 дней). Потом по тому же сдвигу проходишь календарь: отнимаешь целые годы, затем целые месяцы, пока не останется номер дня внутри месяца, и собираешь строку даты.
Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами