Похоже, у нас этого еще нет, так что мы идем:
Соревнование
Напишите программу или функцию, которая принимает в качестве даты дату и выводит номер дня года. Вы не можете использовать любые встроенные функции для этого!
правила
- Как обычно, вы можете написать полную программу или функцию.
- Формат ввода зависит от вас, но он должен содержать год, месяц и день. Уточните, какое решение использует ваше решение!
- Постройки, связанные с датой, запрещены! Вы должны сделать работу самостоятельно. Встроенные функции, которые не связаны с операциями с датами, в порядке.
- Основой для исчисления является григорианский календарь.
- Вы должны учитывать високосные годы.
- Вам нужно обрабатывать только годы в диапазоне [1, 9999]
- Стандартные лазейки запрещены.
- Побеждает меньшее количество байтов!
Testcases
Формат ввода здесь - ГГГГ / ММ / ДД
2016/07/05 -> 187
2000/03/28 -> 88
0666/06/06 -> 157
6789/10/11 -> 284
0004/04/04 -> 95
1337/07/13 -> 194
Удачного кодирования!
Ответы:
Pyth, 31 байт
Спасибо @Dennis и @Jakube за часть високосного года . Ввод YYYY, MM, DD в отдельных строках.
Тестовый пакет .
источник
JavaScript ES6,
8169 байтПредположим, месяцы основаны на 1, иначе я мог бы сэкономить 2 байта.
Редактировать: Сохранено 12 байт с помощью подсказки @ user81655.
источник
C
961028961 байтисточник
Python 3,
152148150 байтСнимает даты в формате "МД ГГГГ".
источник
print n[m-1]+d
Python 2,
10082 байтаПорт Python от ответа @ Neil :
Как и в предыдущем ответе, добавление 17 байт (всего 99 байт) даст полную программу:
Предыдущий ответ:
Как анонимная лямбда:
Может быть преобразован в именованную лямбду за 2 байта штрафа. В качестве альтернативы, полная программа (с учетом ввода в формате
D,M,Y
) может быть достигнута для 117 байтов:источник
Python 3, 125 байт
Еще один подход к этой проблеме. Код использует преимущества приоритетов выполнения булевой алгебры Python, и, поскольку
not
это последняя операция, преобразование в булево выполняется автоматически. Когда суммирование выполнено, логическое значение обрабатывается как 1 или 0. Формат ввода - строка «YY MM DDDD». Система ввода вдохновлена аналогичной @ SteveEckert .Другая форма как функция, 91 байт
В этом случае входными данными являются три целых числа, месяц между 0-11. Это будет работать в Python 2 также.
источник
Excel, 106 байт
Вводит в три ячейки
A1
= Год,B1
= Месяц,C1
= День.1
если LeapYear, еще0
Несколько
30
, ВЫБЕРИТЕ на дополнительные дни, плюс дни в месяцеЭволюция:
источник