Прагнучи вирівняти ігрове поле між мовами із вбудованими бібліотеками дат і без них, давайте попрацюємо з вигаданим календарем. Забуті королівства - це (( ? ) Кампанія для Dungeons & Dragons. Звичайно, у кожного свій календар.
Календар арфов
Зручно, що рік у Забутих Царствах також має 365 днів. Крім того, календар також має 12 місяців. Однак саме тут стає цікаво. Кожен місяць триває рівно 30 днів. Решта 5 днів свята , які потрапляють між місяцями. Ось місяці та відпустки по порядку (з відступними відпусками):
1 Deepwinter
Midwinter
2 The Claw of Winter
3 The Claw of the Sunsets
4 The Claw of the Storms
Greengrass
5 The Melting
6 The Time of Flowers
7 Summertide
Midsummer
[Shieldmeet]
8 Highsun
9 The Fading
Highharvestide
10 Leaffall
11 The Rotting
The Feast of the Moon
12 The Drawing Down
Зауважте, що я вставив шостий відпочинок у дужки. Це високосний день, який відбувається лише кожні чотири роки (так, саме так - немає додаткових шенагіганів із століттями).
Побічна примітка про назви місяців: кожен місяць має офіційну та загальну назву. Вище наведені загальні назви. Я вибрав їх, тому що я думаю, що вони дозволяють отримати більш цікаве стиснення.
Існує кілька нумерацій років, але найпоширенішим є Далеречконінг , скорочений до ДР . (Крім того, кожен рік має одне або більше імен , але ми не збираємося цим займатися.)
Компоненти дати повинні бути розділені комою та пробілом. Загалом, дійсна дата може виглядати так:
4, The Melting, 1491 DR
або
Shieldmeet, 1464 DR
Зауважте, що для свят немає номера дня. (Я вважаю, що 4th of The Melting
було б приємніше для днів місяців, але я не хочу перетягувати порядкові числа до цього.)
Виноска: я придумав це, коли xnor поскаржився, що кожен виклик на дату потребує обчислення високосного року. Я не зміг її повністю усунути, але принаймні це лише один модуль у цьому календарі.
Змагання
З огляду на дійсну дату Календаря Harptos, а також ціле число D
, виведіть дату D
дні пізніше. Зауважте, що це D
може бути негативно, і в цьому випадку ви повинні повернути дату на D
дні раніше.
Ви можете написати програму або функцію, взявши введення через STDIN (або найближчу альтернативу), аргумент командного рядка або аргумент функції та вивівши результат через STDOUT (або найближчу альтернативу), значення повернення функції або параметр функції (out).
Ви можете припустити, що рік є позитивним і менше 2000 року.
Діють стандартні правила гольф-коду .
Випробування
Перший десяток тестових випадків повинен перевірити всі кращі випадки, пов’язані зі святами та високосними роками. Наступний набір полягає в тому, щоб перевірити, що діапазон протягом декількох років роботи і всі місяці та канікули були виконані. Друга половина - знову ж тестові випадки, але з негативними компенсаціями.
"30, Summertide, 1491 DR" 1 => "Midsummer, 1491 DR"
"30, Summertide, 1491 DR" 2 => "1, Highsun, 1491 DR"
"Midsummer, 1491 DR" 1 => "1, Highsun, 1491 DR"
"30, Summertide, 1492 DR" 1 => "Midsummer, 1492 DR"
"30, Summertide, 1492 DR" 2 => "Shieldmeet, 1492 DR"
"30, Summertide, 1492 DR" 3 => "1, Highsun, 1492 DR"
"Midsummer, 1492 DR" 1 => "Shieldmeet, 1492 DR"
"Midsummer, 1492 DR" 2 => "1, Highsun, 1492 DR"
"Shieldmeet, 1492 DR" 1 => "1, Highsun, 1492 DR"
"1, Highsun, 1490 DR" 365 => "1, Highsun, 1491 DR"
"1, Highsun, 1491 DR" 365 => "Shieldmeet, 1492 DR"
"Shieldmeet, 1492 DR" 365 => "Midsummer, 1493 DR"
"Midsummer, 1493 DR" 365 => "Midsummer, 1494 DR"
"Shieldmeet, 1500 DR" 365 => "Midsummer, 1501 DR"
"14, Deepwinter, 654 DR" 5069 => "The Feast of the Moon, 667 DR"
"Midwinter, 17 DR" 7897 => "15, The Fading, 38 DR"
"3, The Claw of Winter, 1000 DR" 813 => "25, The Claw of the Storms, 1002 DR"
"Greengrass, 5 DR" 26246 => "9, The Claw of the Sunsets, 77 DR"
"30, The Melting, 321 DR" 394 => "29, The Time of Flowers, 322 DR"
"17, The Time of Flowers, 867 DR" 13579 => "20, Highsun, 904 DR"
"Highharvestide, 1814 DR" 456 => "30, The Drawing Down, 1815 DR"
"23, The Rotting, 1814 DR" 3616 => "16, Leaffall, 1824 DR"
"1, Deepwinter, 1 DR" 730499 => "30, The Drawing Down, 2000 DR"
"Midsummer, 1491 DR" -1 => "30, Summertide, 1491 DR"
"1, Highsun, 1491 DR" -2 => "30, Summertide, 1491 DR"
"1, Highsun, 1491 DR" -1 => "Midsummer, 1491 DR"
"Midsummer, 1492 DR" -1 => "30, Summertide, 1492 DR"
"Shieldmeet, 1492 DR" -2 => "30, Summertide, 1492 DR"
"1, Highsun, 1492 DR" -3 => "30, Summertide, 1492 DR"
"Shieldmeet, 1492 DR" -1 => "Midsummer, 1492 DR"
"1, Highsun, 1492 DR" -2 => "Midsummer, 1492 DR"
"1, Highsun, 1492 DR" -1 => "Shieldmeet, 1492 DR"
"1, Highsun, 1491 DR" -365 => "1, Highsun, 1490 DR"
"Shieldmeet, 1492 DR" -365 => "1, Highsun, 1491 DR"
"Midsummer, 1493 DR" -365 => "Shieldmeet, 1492 DR"
"Midsummer, 1494 DR" -365 => "Midsummer, 1493 DR"
"Midsummer, 1501 DR" -365 => "Shieldmeet, 1500 DR"
"The Feast of the Moon, 667 DR" -5069 => "14, Deepwinter, 654 DR"
"15, The Fading, 38 DR" -7897 => "Midwinter, 17 DR"
"25, The Claw of the Storms, 1002 DR" -813 => "3, The Claw of Winter, 1000 DR"
"9, The Claw of the Sunsets, 77 DR" -26246 => "Greengrass, 5 DR"
"29, The Time of Flowers, 322 DR" -394 => "30, The Melting, 321 DR"
"20, Highsun, 904 DR" -13579 => "17, The Time of Flowers, 867 DR"
"30, The Drawing Down, 1815 DR" -456 => "Highharvestide, 1814 DR"
"16, Leaffall, 1824 DR" -3616 => "23, The Rotting, 1814 DR"
"30, The Drawing Down, 2000 DR" -730499 => "1, Deepwinter, 1 DR"