Befunge-98 (PyFunge) , 99 95 93 85 байт, Листья в конце новой строки
Все оптимизации были сделаны @JoKing благодаря им
s :1g2/10g\%:d1p10g\`+:b`#@_:1\0d1g#;1+:a/'0+,a%'0+,'.,j;a"7102"4k,d1g7+
>8><><>><><>
Попробуйте онлайн!
Я чувствовал, что мы упускаем некоторую эзостерию здесь, поэтому я нашел решение на своем любимом эзостерическом языке.
Объяснение :
>8><><>><><>
Кодирует продолжительность 12 месяцев.
s
Сохраните старый день в пустом пространстве.
:1g2/
Получите значение ASCII из нижней строки и разделите его на два, что даст нам длину данного месяца. Пример: 8 = 56 в ASCII => 56 / 2 = 28 => Месяц (февраль) имеет 28 дней
10g\%
Получите ранее сохраненный день и по модулю его на длину месяца, что позволяет нам перенести дату в следующий месяц.
:d1p
Сохраните копию нового обновленного дня.
10g\`+
Проверьте, если старая дата > новая дата => мы перешли в следующий месяц => добавить 1 к счетчику месяца
:b`
Проверить, если счетчик месяца> 11, что означает, что мы достигли конца года (с использованием индексации 0)
#@_
На основе предыдущего, если программа завершится,
:1\0d1g
переупорядочить стек так это выглядит так:Month, 1, Month, 0, Day
#
пропустить следующую инструкцию (duh)
1+:a/'0+,a%'0+,'.,
Преобразовать число в 1, индексировать, распечатать, добавить .
в конце.
j;
Используйте 0 из стека, чтобы не прыгать, и используйте ;
клавишу, чтобы снова перейти к расписанию печати, затем используйте 1, чтобы перескочить через ;
следующее время
a"7102"4k,
Печать 2017\n
d1g
Получите значение дня снова
7+
Добавьте неделю перед повторением