Если задано текстовое представление (полное имя без учета регистра или трехбуквенное сокращение) месяца, укажите количество дней в месяце.
Так , например, december
, DEC
и dec
все должны вернуться 31.
Февраль может иметь 28 или 29 дней.
Предположим, что ввод - это месяц в одной из правильных форм.
code-golf
date
code-challenge
polyglot
hello-world
unicode
rosetta-stone
code-golf
ascii-art
kolmogorov-complexity
code-golf
math
approximation
code-golf
array-manipulation
code-golf
math
sequence
code-golf
array-manipulation
decision-problem
code-golf
ascii-art
random
card-games
code-golf
number
integer
base-conversion
code-golf
quine
binary
code-golf
graph-theory
classification
code-golf
math
number
code-golf
math
geometry
code-golf
tips
ruby
qw3n
источник
источник
december
,DEC
иdec
должны все возвращение 31» - Это намерение?Ответы:
Пайк , 9 байт
Попробуй это здесь!
Или 15 байтов, если требуются все входные форматы
Попробуй это здесь!
источник
FEB
.Apr
,Jun
,Sep
иNov
) , но и думать , что это требует немного уточнения в ОП (см моего вопроса ).JavaScript (ES6),
48 47 44 4342 байтадемонстрация
Показать фрагмент кода
Как?
Эти операции приводят к поисковой таблице из 8 записей, что было бы не очень интересно, если бы значения были распределены случайным образом. Но любой результат больше 2 сопоставляется с 31 днем. Таким образом, только первые 3 записи должны быть сохранены явно.
источник
.substr(0,3)
не обязательно. Итак, если подумать, это может быть не лучшим подходом.substr
?slice
!Javascript (ES6),
3633 байта-3 байта благодаря @JustinMariner и @Neil
Извините @Arnauld, злоупотребление странностью JavaScript короче, чем ваши модные базовые преобразования.
Как это работает
По какой-то причине JavaScript позволяет вводить даты за пределами указанного месяца. Код подсчитывает, сколько дней вне месяца, чтобы определить дату, сколько дней в месяце. Примеры:
"FEB31"
→Thu Mar 02 2000
→31 - 2 % 31
→29
"October31"
→Tue Oct 31 2000
→31 - 31 % 31
→31
Контрольные примеры
Показать фрагмент кода
источник
31
. Похоже, работает в Chrome, как,new Date("feb31")
например.+31
три байта. Ничего из этого не работает в Firefox.Python 2 ,
464538 байт-1 байт благодаря @totallyhuman
Попробуйте онлайн!
источник
Баш , 21 байт
Попробуйте онлайн!
Принимает ввод в качестве аргумента командной строки и выводит завершающий символ новой строки. Количество дней в феврале зависит от текущего года
Требуется версия util-linux 2.29
cal
, доступная на TIO . Также зависит от локали, поэтому LC_TIME необходимо изменить в неанглийских системах (спасибо @Dennis за разъяснения).Идея прокачки
xargs
доcal
выхода триммера исходит из этого SO ответа .источник
Протон , 50 байт
Попробуйте онлайн!
-14 байтов благодаря Джонатану Фреху
Тридцать дней в сентябре, апреле, июне и ноябре. У всех остальных было арахисовое масло. Все, кроме моей бабушки; у нее был маленький красный велосипед, но я украла его. muahahahahaha
(Я ждал, чтобы рассказать эту шутку (источник: мой преподаватель математики) целую вечность на этом сайте: D: D: D)
источник
'sepaprjunnov'
вместо списка строк.C # (.NET Core) ,
52 + 13 = 6538 + 24 = 62 байтаПопробуйте онлайн!
+24 для
using D=System.DateTime;
Подтверждения
-3 байта благодаря Гжегож Пулавски.
источник
using System;
? Или вы можете исключить это из числа байтов?using D=System.DateTime;
иm=>D.DaysInMonth(1,D.Parse(1+m).Month)
как здесь: tio.run/##jc5BSwMxEAXgs/…Python 3 , 60 байт
Попробуйте онлайн!
Портирование моего решения Proton
-10 байт благодаря полностью человеческому
источник
Shell / GNU Date ,
39, 26 байтовгде
$1
название месяца.Попробуйте онлайн!
редактировать: спасибо Деннис за сохранение многих байтов!
источник
AWK ,
4544 байтаПопробуйте онлайн!
источник
Python 3 -
93868482 байтаВарианты ответа (показывающие прогрессию времени и байтов для каждого со ссылками TIO):
Оригинальный ответ (93 байта)
-7 байт благодаря Джонатану Фреху.(86 байт)
На 2 байта больше, благодаря моему собственному дальнейшему тестированию
monthrange
результатов, причем второе значение всегда является более высоким значением. (84 байта) 1-2 больше, используя
import calendar as c
и ссылаясь на негоc.monthrange
. (82 байта, текущая версия )Очевидно, не так хорошо, как ответ HyperNeutrino, который не использует встроенные модули, но это все еще работает.
Сноски
1 : Тестовые случаи через TIO.run, показывающие доказательство того, как я работаю с этими
monthrange
значениями, для различного числа тестовых случаев за месяц.источник
import ...,calendar as c
чтобы не нужно было набирать «calendar» дважды.Perl 5 , 47 + 1 (
-p
) = 48 байтПопробуйте онлайн!
источник
($_)=/.(..)/;
вместо$_=substr$_,1,2;
и()
вокруг"eprunov"=~/$_/i
можно удалить.Haskell ,
656362 байтаПопробуйте онлайн!
Подход сопоставления с образцом. Первая строка должна обрабатывать нечувствительность к регистру. Затем мы возвращаем,
28
если третья буква меньше C (число 3),30
если вторая буква больше C, а третья больше M, или31
иначе.Редактировать: -1 байт благодаря Лео
Альтернатива (
6564 байта)Попробуйте онлайн!
источник
c<3
вместоa==6
(февраль - первый месяц, если вы заказываете их третьей буквой, а затем декабрь)APL (Dyalog) , 32 байта *
Функция молчаливого префикса. Предполагается
⎕IO
( я ndex O rigin)0
, который по умолчанию на многих системах.Попробуйте онлайн!
⍠1
без учета регистра1
вернуть длину⎕S
PCRE S нить поиск для'.p|un|no|f'
any-char, "p" или "un" или "no" или "f"⊃⍨∘⊃
и использовать первый элемент этого (0, если нет), чтобы выбрать из31 28 30
этот списокТаким образом:
Ap r, S ep , J un и No v выберут число с индексом 2, а именно 30
F eb выберет номер по индексу 1, а именно 28
все остальное выберет число с индексом 0, а именно 31
* Использование классического и подсчет ,
⍠
как⎕OPT
.источник
Шаблон Mediawiki, 19 байт
источник
MATL , 22 байта
Попробуйте онлайн!
объяснение
источник
Wolfram Language (Mathematica) ,
4630 байтПопробуйте онлайн!
Даст либо
28
или29
за февраль в зависимости от того, является ли текущий год является високосным.Как это работает
Все команды даты в Mathematica будет интерпретировать ввод таких
April
,APR
,ApRiL
и так далее , как в первый день соответствующего месяца в текущем году. (В качестве бонуса ввод, такой как"February 2016"
или{2016,2}
также, работает как ожидалось.)#~NextDate~"Month"
дает первый день месяца после этого иDayCount
число дней между двумя аргументами. Количество дней между 1 апреля и 1 мая - 30, количество дней в апреле.источник
Java 8 , 47 байт
Попробуйте онлайн!
Закончилось использование той же идеи, что и в ответе Германа Лауэнштейна на JS , где установка даты 31-го перенесена в следующий месяц. Java требует год, так что было установлено
1
.источник
Сетчатка ,
323128 байтПопробуйте онлайн! Редактировать: 1 байт сохранен благодаря @RobertBenson. Сохранено 3 байта благодаря @ovs.
источник
q / kdb +, 36 байт
Решение:
Примеры:
Объяснение:
Есть миллион способов снять кожу с кошки. Я думаю, что немного отличается от других. Возьмите 2-ю и 3-ю буквы ввода, строчные буквы, затем найдите их в строке
"ebeprunov"
. Если они находятся в точке 0, то это февраль, если они находятся в точке> 0, они 30-дневные, если они не в строке, они 31-дневные.источник
Excel VBA,
4743 байтаФункция анонимного непосредственного окна VBE, которая принимает данные в виде названия месяца, сокращения или номера из диапазона
[A1]
и выводит длину этого месяца в 2001 году в функцию непосредственного окна VBE.Старая версия
источник
PHP,
3833 + 132 + 1 байтСохранено 5 байт благодаря Титу
Беги как труба с
-nF
Попробуйте онлайн!
источник
.' 1'
, похоже, работает на TIO без него!<?=date(t,strtotime($argn));
(запустить как трубу с-nF
).' 1'
, но он не работал. Увидев ваш комментарий, я попытался выяснить, что я сделал не так. Поскольку я запускал его 31-го числа месяца, он брал 31-й (текущий) день для любого месяца, который я вставил, что будет превышать текущий месяц. 31 февраля превращается в 3 марта, поэтому код возвращает 31 (количество дней в марте). Из-за этого каждый месяц возвращался 31. Таким образом, он работает без в.' 1'
любой день <= 28 числа месяца.'t'
->t
. Кроме того, мне пришлось провести кучу поисков, чтобы выяснить, как «работать как труба с-nF
», но я понял это (я думаю). :)Java (OpenJDK 8) , 126 байт
Попробуйте онлайн!
источник
false
до логического выражения, например,1<0
чтобы сэкономить пару байтов.QBIC ,
4935 байтЗначительно короче с некоторыми хитростями.
объяснение
источник
Perl 5 , 24 байта
Код 23 байта + 1 для
-p
.Попробуйте онлайн!
источник
Рубин , 45 байт
Попробуйте онлайн!
Ruby's
Date.parse
принимает название месяца самостоятельно. То, что обычно было бы вправо shift (>>
) фактически добавляет к месяцуDate
объекта. Вычитание влияет на день месяца, который будет перенесен на последний день предыдущего месяца.источник
Котлин , 92 байта
Попробуйте онлайн!
источник