Мне действительно нравятся времена, которые следуют определенным образцам. В частности, мне нравятся времена, когда все цифры одинаковы или все цифры увеличиваются арифметически на единицу слева направо. Кроме того, я внутренне ненавижу, когда люди пишут письма в мое время, поэтому вся эта чепуха AM / PM для меня мертва. Итак, мои любимые времена:
0000 0123 1111 1234 2222 2345
Для моего душевного спокойствия мне нужно, чтобы вы написали мне одну программу, которая, учитывая текущее время в качестве входных данных, оба: (A) если это не одно из моих любимых времен, говорит мне обоим (i) сколько минут это прошло со времени моего последнего любимого времени, а также (ii) через сколько минут наступит мое следующее любимое время; и (B) , если он находится в настоящее время один из моих любимых времен, поставляет один "значение сигнала.
вход
Ваша программа должна принимать (любым методом: аргумент функции, аргумент stdin
командной строки и т. Д.) Текущее время в любом из следующих форматов:
Четырехзначное время в виде строки
Целое число, которое может быть дополнено нулями слева, чтобы сделать четырехзначное время в виде строки
Последовательность из четырех (или менее) целых чисел, упорядоченных таким образом, что первое целое число в последовательности является самой левой (значащей) цифрой на входе времени (например,
0951
может быть достоверно представлено как[0, 9, 5, 1]
или[9, 5, 1]
)- Представление в
0000
виде последовательности нулевой длины является приемлемым
- Представление в
В случае ввода строки он должен содержать только цифры, двоеточия или другие знаки препинания. Можно предположить, что входные данные всегда действительны в течение 24 часов:, HHMM
где 0 <= HH <= 23
и 0 <= MM <= 59
. Не обращайте внимания на возможность високосной секунды.
Выход
Ваша программа должна предоставить (функции возврата stdout
и т. Д. Все в порядке) либо (A), либо (B) , в зависимости от того, является ли введенное значение целевым временем.
Для):
Укажите два числовых значения в любом приемлемом формате, например:
Вывод из одной строки с подходящим разделителем
Последовательные целочисленные / строковые выходы, например,
bash
печать двух строк дляstdout
:49 34
Упорядоченные возвращаемые значения длины два, такие как список Python, массив C и т.д .:
[49, 34]
Значения могут прийти в любом порядке. Например, оба из следующих будут допустимыми выходами для ввода 1200
:
49 34
34 49
Однако порядок и разделитель должны быть одинаковыми для всех входных значений!
Для (B):
Произведите любой иначе недостижимый результат. Однако один и тот же результат должен быть получен для всех шести целевых периодов времени. Бесконечные циклы исключены.
Образцы входов / выходов
YAY!!!
используется здесь в качестве наглядного примера и не является предписывающим.
Input Output
------ --------
0000 YAY!!!
0020 20 63
0105 65 18
0122 82 1
0123 YAY!!!
0124 1 587
0852 449 139
1111 YAY!!!
1113 2 81
1200 49 34
1234 YAY!!!
1357 83 505
1759 325 263
1800 326 262
1801 327 261
2222 YAY!!!
2244 22 61
2345 YAY!!!
2351 6 9
Это код-гольф , поэтому выигрывает самый короткий код в байтах. Стандартные лазейки запрещены.
Ответы:
Желе ,
3433323128 байт3 байта благодаря г - н Xcoder - х
.ị
и³
уловок.Попробуйте онлайн!
Некоторые части точно такие же, как в ответе Джонатана Аллана , но я публикую его, так как считаю, что он достаточно отличается от него и независимо написан на основе моего ответа Пифа (и короче: D). Также должно быть место для улучшения.
Входные данные представляют собой целые числа, выходные данные представляют собой массив предыдущих и последующих периодов или пустой массив для особых времен.
объяснение
Используя пример ввода
1200
.d³
преобразует время к основанию 100, в часы и минуты:[12,0]
.ḅ60
новообращенные от основания 60 , чтобы получить общее количество минут:720
.;15
пары его с 15:[720, 15]
.83,588
создает массив[83, 588]
.ṁ5
делает его длина 5:[83, 588, 83, 588, 83]
.¤
сочетает в себе два вышеуказанных действия. Просто техническаяj
присоединяется к паре с массивом:[720, 83, 588, 83, 588, 83, 15]
._\
вычитает значение каждого массива из первого и получает промежуточные результаты:[720, 637, 49, -34, -622, -705, -720]
.ṠÞ
Стабильно сортирует их по сигнатуре[-34, -622, -705, -720, 720, 637, 49]
.A
принимает абсолютные значения:[34, 622, 705, 720, 720, 637, 49]
.µ
запускает новую монадическую цепочку. Опять техничность..ị
берет последние и первые пункты:[49, 34]
.×Ạ
повторы , что когда - то , если нет нулей, или ноль раз иначе:[49, 34]
.источник
,
чтобы ,;
так как он был их подобрали в качестве списка литерала).³
вместо100
это разрешено )YAY!!!
значение[0, 0]
, всегда то же самое.xẠ
качестве нулевого фильтра , так как я вроде предпочитаю[]
более ,[0, 0]
потому что это более явно отличается.JavaScript (ES6),
8783 байтаСохранено 4 байта благодаря @ l4m2
Принимает ввод в виде строки. Возвращает либо
0
массив из 2 элементов.Контрольные примеры
Показать фрагмент кода
Как?
Нам плевать на результат
.every()
цикла. При условии, что ввод действителен, он всегда будет ложным. Что нас действительно интересует, так это когда мы выходим из этого цикла.Мы выходим, как только мы находим любимое время
i
(выраженное в минутах), которое больше или равно эталонному времениk
(время ввода,t
преобразованное в минутах). Затем мы возвращаем,0
еслиi == k
или 2 задержки в противном случае.источник
t%100+(t/25>>2)*60
=>t-(t/100|0)*40
Befunge-93,
8885868074 байтаПопробуйте онлайн!
Выводит количество минут с последнего избранного времени, затем количество минут до следующего избранного времени (разделенных последовательностью из двух символов: пробел, дефис). Если это уже любимое время, то возвращается один ноль.
источник
C, 121 байт
Выводит новую строку, если время является любимым.
Попробуйте онлайн!
источник
Чистый , 126 байт
Определяет функцию
?
взятияInt
и возврата(Int, Int)
.Когда аргумент является любимым временем, он вызывает сбой вызывающей программы
hd of []
.Попробуйте онлайн!
источник
Pyth,
484542 байтаПопробуйте онлайн. Тестирование.
Код принимает строку времени и выводит предыдущий и следующий раз в виде массива или,
0
если время является особенным.Интересно, что императивный подход также составляет 42 байта:
объяснение
cz2
разбивает input (z
) на части из двух символов.sM
оценивает их как целые числа.i
…60
Анализирует результирующий массив из двух элементов как основание 60.,83 588
представляет массив[83, 588]
.*3
утроить это до[83, 588, 83, 588, 83, 588]
.P
удаляет последнее588
.+
...15
добавляет15
к концу..u-NY
начинается с проанализированного числа, вычитает из него каждое число в массиве и возвращает промежуточные значения. Это отличия от каждого особого времени.J
правопреемники этих различийJ
.*F
вычисляет произведение различий. Это будет 0, если время было особенным.&
останавливает оценку и возвращает 0, если время было особенным.._DJ
стабильно сортирует различия по знаку.K
сохраняет этот массив вK
.e
берет последний элемент в массиве._hK
берет первый элемент в массиве и отрицает его,
возвращает два в виде массива.источник
cz2 60
наc2z60
(они эквивалентны 4-элементным спискам)Желе ,
33 3234 байта+3+2 байта, чтобы исправить, чтобы все понравившиеся выходные данные времени были равны.должен быть более коротким путем!
Монадическая ссылка, содержащая список из четырех цифр и возвращающая список, содержащий два целых числа
- если это подходящее время, в результате обе записи будут равны нулю.
Попробуйте онлайн!или посмотрите набор тестов .
Как?
источник
Шелуха , 36 байт
Попробуйте онлайн!
Спасибо Згарбу за то, что он объяснил мне, как троицы работают в чате. Пытался играть в гольф
↑0
, но по какой-то причине у меня ничего не получалось (?). Это мой первый нетривиальный ответ Хаска, и, оставляя вышеупомянутое в стороне, я вполне доволен им. Значение, используемое вместоYAY!!!
это[]
(но я надеюсь , что изменится для целей игр в гольф).объяснение
источник
Котлин , 293 байта
украшенный
Тестовое задание
TIO
TryItOnline
источник