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+Добавьте неделю перед повторением