Для числа 1≤n≤365 выведите n-й день года в формате «день-число-месяц». Например, если задано 1, вы должны вывести «1 января», без «of».
Будет использоваться григорианский календарь, и программа не должна учитывать високосные годы, поэтому ваша программа никогда не должна выводить «29 февраля» ни при каких обстоятельствах. Можно использовать любой метод, если он соответствует формату «день-число-месяц», упомянутому ранее. Ваша программа также должна правильно выводить порядковые номера, то есть она всегда должна выводить 1, 2, 3, должны 1, 2 или 3 соответственно быть числами дня для любого ввода. Допускаются пробелы или другие отступы.
Это код гольф, поэтому выигрывает самое короткое решение по персонажам.
Тестовые случаи:
1 gives 1st January
2 gives 2nd January
3 gives 3rd January
365 gives 31st December
60 gives 1st March
11 gives 11th January
11
(11 - е января) и21
(21 - го января) для тестовых случаев.123=
это часть требуемого результата. Или просто редактировать свои тестовые случаи , чтобы прочитать что - то вроде:365
дает31st December
Ответы:
PHP ,
38403028 байтПопробуйте онлайн!
Запуск с
php -nF
вводом отSTDIN
. Пример (названный выше скриптy.php
):объяснение
Постройте временную метку для нужного дня в 1970 году (обычно это не високосный год), умножив
day number * number of seconds per day
(86400). Однако это даст на один день больше, поэтому вместо этого умножьте наnumber of seconds in a day - 1
(86399), что для диапазона входных чисел (1≤n≤365) приведет к отметке времени конца каждого правильного дня. Тогда просто используйте встроенный в PHP формат даты для вывода.источник
-n
нужно?Желе ,
79 7877 байт-1 исправление ошибки :) (не нужно предварительно транспонировать, чтобы найти индекс, следует пост-обратное, но тогда мы можем хвост, а не голова)
-1 с помощью отражения (
⁽©ṅB+30_2¦2
->⁽0ṗb4+28m0
)Полная программа, которая печатает результат
Попробуйте онлайн!
Как?
обновлю это позже ...
источник
"thstndrd"
разделенной на части размером 2 (.•oθ2(w•2ô
), так что спасибо. :)C # (интерактивный компилятор Visual C #) ,
11511310998 байтСпасибо @someone за сохранение 9 байтов
Попробуйте онлайн!
источник
.code.tio(2,22): error CS0165: Use of unassigned local variable 'p'
Похоже, что структура вещь не работает.var g=new DateTime().AddDays(n-1)
хотя работаетPython 3.8 (предварительная версия) , 112 байт
Попробуйте онлайн!
Как ни странно, мне не нужно заключать в скобки
d:=(t:=gmtime(~-x*86400)
, вероятно, потому, что интерпретатор проверяет, есть ли()
символы вокруг выражения присваивания, а не заключает ли это выражение в скобки.-2 благодаря Гуу .
-5 спасибо xnor .
источник
Perl 6 ,
166161 байтПопробуйте онлайн!
Жесткие коды всех названий месяцев, которые занимают большую часть пространства. Чувак, Perl 6 действительно нуждается в правильном редакторе даты.
источник
Взлом,
1155939 байтПоскольку @gwaugh получил то же решение, что и я, пока я играл в гольф, я вместо этого публикую это в Hack :).
источник
mktime()
вызова, иначе он вернет неправильный вывод, если будет работать в високосный год. (должен был сделать мой ответ).JavaScript (ES6),
117113 байтовСохранено 4 байта благодаря @tsh
Попробуйте онлайн!
комментарии
Без встроенных дат, 188 байт
Попробуйте онлайн!
источник
0
будет работать как использование"en"
. И изменение вtoLocaleString
сэкономит 4 байта. 110 байтtoLocaleString
используются системные настройки по умолчанию, когда передается нераспознанная строка или числовое значение. Так что это может быть что угодно. Этот параметр в основном неэффективен для экземпляра TIO, потому что в любом случае устанавливаются только английские локали .Smalltalk, 126 байт
источник
11th,12th,13th
ли это ? Если я правильно прочитал, вы целочисленно разделите день на 10, но это будет означать, что это приведет к тому11st,12nd,13rd
, что, если что-то еще в коде не исправит это, пока я не знаю об этом.C # (интерактивный компилятор Visual C #) ,
141139133124122 байтаСпасибо Арно за более быстрый метод удаления 11,12,13-й экономии 4 байта
Попробуйте онлайн!
источник
a=>{var d=s.AddDays(a-1);int x=d.Day,m=x%30%20;return x+"thstndrd"[(m<4?m*2:0)..2]+$" {d:MMMM}";};DateTime s
Интерактивный компилятор, похоже, не поддерживает изменение уровня языка на «предварительный просмотр», однако.DataTime s
R ,
158134 байт-24 байта @ Ник Кеннеди за игру в гольф 'st', 'nd', 'rd' и 'th'. Благодарность!
Попробуйте онлайн!
источник
`if`
лучше. Спасибо.MySQL,
474542 байта1901 год можно заменить любым годом, который был / не является високосным.
Редактировать: благодаря @Embodyment of Ignorance удалось сохранить два байта, удалив пробелы, и еще три байта, изменив год на 1 .
источник
1901, n
строкой?05AB1E ,
81797876757473717069 байт-9 байт благодаря @Grimy .
-1 байт благодаря
standard the
трюку @ JonathanAllanth,st,nd,rd
, который он использовал в своем ответе Jelly .Попробуйте онлайн или проверьте все возможные тестовые случаи .
Объяснение:
Посмотрите эту подсказку 05AB1E, чтобы понять, почему:
”……‚應…ä†ï€¿…Ë…ê†Ä…æ…Ì…Í”
является"December January February March April May June July August September October November"
…thŠØ
является"th standards"
•ΘÏF•
является5254545
источник
•EË7Óæ•S₂+
, но, к сожалению, ваш -3 гольф не работает. Индексирование автоматически оборачивается в 05AB1E, поэтому5st,6nd,7rd,25st,26nd,27rd,29st
будет неправильно. PS: если бы это сработало,<Ā
могло бы быть≠
еще -1. :)Á
).•C.ñÒā•
для•ΘÏF•º
, дополнительные цифры не имеют значения)Баш,
8280 байт-2 байта благодаря @ ASCII-only
TIO
bash + GNU date, 77 байт
источник
Shell + coreutils,
11290 байтПопробуйте онлайн! Ссылка включает в себя тестовые случаи. Изменить: Сохранено 22 байта благодаря @NahuelFouilleul. Объяснение:
Рассчитайте количество дней после первого дня, предшествующего не високосному году. (К сожалению, вы не можете сделать относительную дату вычислений из
@-1
.)Выведите день месяца (без нуля в начале)
th
и полное название месяца.Исправить
1st
,2nd
,3rd
,21st
,22nd
,23rd
и31st
.Восстановить
11th
до13th
.источник
s
вdays
могут быть удалены, а19
в1969
Желе ,
11511410197 байтПопробуйте онлайн!
Долго по стандартам желе, но сделано из первых принципов.
Спасибо @JonathanAllan за сохранение 13 байт благодаря лучшему пониманию сжатия строк.
источник
“£ṢtẒ⁽ẹ½MḊxɲȧėAṅ ɓaṾ¥D¹ṀẏD8÷ṬØ»Ḳ¤
спасет 13 (Compress.dictionary ищет ведущий пробел и имеет специальную обработку для него).Google Sheets,
11810386 байтЯ не могу отредактировать свой комментарий, поэтому вот рабочая версия кода Google Sheets.
Попробуйте онлайн!
источник
Красный , 124 байта
Попробуйте онлайн!
Добавляет
n
- 1 дней к 1-1-1 (1 января 2001 г.) для формирования даты, затем использует метод Арно для индексации суффиксов месяца. Жаль, что красный индексируется 1, это требует дополнительной настройки. Хорошо, что Red знает названия месяцев :)источник
APL (NARS), 235 символов, 470 байтов
13561787 - это число, которое в базе 4 можно суммировать с (12 (28) для получения длины каждого месяца ... test:
источник
C (gcc) ,
174155 байтовПопробуйте онлайн!
источник
Python 3 , 95 байт
Дата это: P
from datetime import *;f=lambda s:(datetime(2019,1,1)+timedelta(days=s-1)).strftime("%d of %B")
Попробуйте онлайн!
источник
of
также не нужно