Вступление
Часто люди называют даты «второй пятницей августа 2018 года» или «четвертым воскресеньем марта 2012 года». Но трудно сказать, что это за дата! Ваша задача состоит в том, чтобы написать программу, которая получает год, месяц, день недели и целое число, и выводит эту дату.
Вызов
Для ввода вы получите год, месяц, день недели и число.
Вы можете вводить данные в любом приемлемом формате, например, использовать строку для дня недели или использовать нулевой индексированный день недели, или даже взять год и месяц в одной строке. Объясните свой входной формат в своем ответе.
Целое число, указывающее, какой день недели в месяце для таргетинга будет целым числом от 1 до 5. Целое число никогда не будет указывать на день недели, который не существует (например, пятую пятницу февраля 2019 года, который не существует).
Годы всегда будут положительными.
Ваш вывод может быть в любом разумном формате, включая печать вашей окончательной даты. Однако, пожалуйста, объясните ваш выходной формат и ответ.
Указание года и месяца в выходных данных необязательно. Кроме того, вы можете предположить, что дата действительна.
Пример ввода и вывода
Рассмотрим эти входные данные с форматом, принимающим год как четырехзначное число, месяц как целое число, день недели как строку и порядковый номер как целое число:
2019, 3, суббота, 2
2019, 12, воскресенье, 1
2019, 9 суббота, 1
Выход:
9 марта
1 декабря
7 сентября
Это код-гольф , поэтому выигрывает самый короткий ответ.
date
, но забавно, у парсера есть ... интересная интерпретация здесь.Ответы:
Шаблон MediaWiki, 19 байт
Это порт ParserFunctions шаблона MediaWiki для этого ответа PHP
Примечание:
#time
используйте PHPstrtotime
внутри.Пример ввода
Пример вывода
источник
Japt
1915 байтВходные данные: год, основанный на 0 индекс месяца, основанный на 0 индекс дня недели (
0
воскресенье) &n
.Попытайся
источник
C # (интерактивный компилятор Visual C #) , 59 байт
Попробуйте онлайн!
-27 байт благодаря @EmbodimentOfIgnorance!
Меньше гольф-кода ...
Возвращаемое значение является целым числом для дня месяца запрошенной даты.
источник
SmileBASIC,
5851484645 байтВвод в форме:
week,year/month/weekday
week
: номер недели, 0 проиндексированyear
: год, 4 цифрыmonth
: месяц (с 1 индексом), 2 цифры с0
добавлениемweekday
: день недели (1-индексированный, 1 = воскресенье), 2 цифры с0
добавлениемВыходными данными является день месяца, индексированный 0.
Вторая суббота марта 2019 года будет
1,2019/03/07
→8
(9 марта)Ungolfed
объяснение
Форма ввода была специально выбрана так, чтобы год / месяц / день недели можно было передавать напрямую
DTREAD
, что представляет собой функцию, которая анализируетYYYY/MM/DD
строку и возвращает год / месяц / день в виде чисел, а также вычисляет день недели.Однако обратите внимание, что там, где
DTREAD
ожидается день месяца, вместо этого мы указываем день недели. Это усложняет ситуацию, но также означает, что входных значений меньше, и нам не нужно добавлять/01
в конец строки даты.DTREAD
выходыW
иD
.W
будний день иD
день недели вW
день месяца.(Таким образом, если вы введете
7
в качестве дня недели,D
будет7
иW
будет любой день недели, 7-й день месяца)Выражение
(5-W+D*2)MOD 7
используется для получения 1-го вхождения входного дня недели в виде 0-индексированного дня месяца. (Я понял это в основном методом проб и ошибок)После этого программа просто добавляет
WEEK*7
.Я действительно хотел бы, чтобы были отдельные слова для «дня недели» и «дня месяца».
источник
Perl 6 ,
5248 байтПопробуйте онлайн!
Блок анонимного кода, который принимает данные в виде года, месяца, дня недели (воскресенье - 0) и номера недели (индексируется 0). Вывод является объектом даты.
Старое объяснение:
источник
$^c+4-$!.daycount
.MATL ,
2827 байтЭто использует три входа:
'March 2019'
Sat
'2
.Выход представляет собой строку день, год и месяц разделенных тире:
09-Mar-2019
.Попробуйте онлайн!
объяснение
Рассмотрим входы
'March 2019'
,'Sat'
,2
.источник
Python 3 ,
9282 байта82 байта благодаря @Jo King
Попробуйте онлайн!
Оригинальная версия, 92 байта
Попробуйте онлайн!
Принимает год как целое число, месяц как целое число с 1 индексом, день недели как целое число с 0 индексами, где понедельник
0
и воскресенье6
, а неделя месяца как целое число с 1 индексом.Как это устроено:
источник
R ,
7269 байтПопробуйте онлайн!
Принимая вход как:
источник
PHP ,
46,43, 31 байтПопробуйте онлайн!
Программа получает в качестве входных данных строку типа
"second saturday of March 2019"
Программа печатает номер дня.
-12 байт благодаря Шегги.
источник
of
во входных данных.Groovy , 46 байт
Попробуйте онлайн!
Вводится как годы с 1900 года, 0-индексированный месяц, 0-индексированный день (воскресенье = 0) и номер недели
источник
Скала , 86 байт
Попробуйте онлайн!
источник
Красный ,
6460 байтПопробуйте онлайн!
Принимает год, месяц и день недели в виде цифр с индексом 1, понедельник - первый день недели.
источник
to-date
это вещь. может быть, это было бы полезно в соревновании по формату накануне Рождестваnow
для этого вызова" Eve"
методе <repeat date2-date1 times> iirc)>> 25-Dec-2019 - 1-1-2019 == 358
APL (Dyalog Unicode) , 36 байт SBCS
Полная программа. Запрашивает для
[year,month]
(январь 1), затем для дня (воскресенье 0), затем для n (сначала 1).Попробуйте онлайн!
⎕CY'dfns'
с о р у в dfns библиотеке⊣
отменить результат этого в пользу ...⎕
подскажите консоль для[year,month]
номеровdays
[с] дней [п] , поскольку 1899-12-31 от 0 - го числа этого месяца(⍳31)+
добавить я ntegers 1 ... 31 в том , чтоd←
хранить вd
(для д чисел ау)7|
остаток от деления на 7 (день недели с воскресеньем в 0 из-за хорошей эпохи)⎕=
подскажите консоль для номера дня недели и получите маску, где равны номера дня неделиd/⍨
фильтрd
с этой маской⎕⊃
подскажите консоль и используйте ее, чтобы выбрать из списка номеров дняdate
[С] метка даты и времени [n] (имеет завершающие нули для часов, минут, секунд, миллисекунд)Нажмите [c] для кода и [n] для заметок.
источник
JavaScript (ES6),
4948 байтПринимает параметры как
f([year, month], day, number)
. Месяц и день недели (начиная с воскресенья) индексируются нулем. Редактировать: 1 байт благодаря @Shaggy.источник
0
в JS.TSQL, 106 байт
Выход:
Попробуйте это
источник
Котлин ,
13184 байта47 байтов благодаря ASCII-только коду и комментарию.
Ввод: год, месяц, номер недели, номер недели, номер недели
Все целые числа от 1 до максимума в одной строке. Номер дня недели - воскресенье с 1 по субботу 7. Основная программа заставляет год терять 1900 для класса Дата, а месяц и день недели сдвигаются, чтобы начинаться с нуля вместо единицы перед вызовом лямбды. Вы можете ввести свои аргументы в текстовое поле ввода, чтобы попробовать свои собственные даты.
Выход: экземпляр класса Date. Основная программа отображает результат как: Сб. 09 марта 00:00:00 UTC 2019.
Существует расширенная версия с комментариями, объясняющими код для желающих узнать больше.
Попробуйте онлайн!
источник