Контест Middle Современный C++20/23 обновлено

Даты на std::chrono: день недели и интервалы

Условие

Дан список дат в формате YYYY-MM-DD. Для каждой даты выведите:

  • invalid, если такой даты не существует (например, 2023-02-29 или месяц 13);
  • иначе день недели (Mon, Tue, Wed, Thu, Fri, Sat, Sun) и через пробел число дней от предыдущей корректной даты списка до этой (может быть отрицательным); для первой корректной даты вместо числа выведите -.

Ввод: q (1 ≤ q ≤ 2000), затем q строк с датами (год от 1900 до 2100, месяц и день из двух цифр от 00 до 99).

Вывод: q строк.

Используйте календарь C++20 из <chrono>: std::chrono::year_month_day, sys_days, weekday.

Пример 1

Ввод:

3
2024-02-29
2023-02-29
2024-03-01

Вывод:

Thu -
invalid
Fri 1

Пример 2

Ввод:

2
1900-02-29
2000-02-29

Вывод:

invalid
Tue -

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.