Вступление:
Дома у нас есть часы, которые бьют установленное количество каждый час, но также бьют один раз каждые полчаса. Таким образом, с 0:01 до 12:00 включительно это происходит в следующем порядке:
1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12
Вызов:
Учитывая целое число n
, выведите список таймфреймов, в которых общее количество ударов равно n
. Кроме того, всегда начинайте как минимум за 1 минуту до этого периода и заканчивайте как минимум через 1 минуту после этого периода (и не более 29 минут).
Например, если ввод n=8
, вывод может быть:
[00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01]
Для которых эти временные рамки имеют следующие суммы, все равны 8
:
[1+1+2+1+3, 1+2+1+3+1, 3+1+4, 1+6+1, 1+7, 7+1, 8]
Правила вызова:
- Выход гибкий. Вы можете выводить объекты Time (или Date / DateTime), временные метки, строки (с или без начальных нулей), десятичные дроби с
.29
/.31
/.59
/.01
(то есть0.29-3.01
вместо00:29-03:01
) и т. Д. Если ясно, что это до и после таймфрейма ,
Кроме того, вы можете выбрать сумму самостоятельно. Во всех моих примерах я использую 1 минуту, но вы также можете выбрать 5 минут, 15 минут и т. Д. Это также означает, что вы можете использовать.4
/.6
/.9
/.1
(т.е.0.4-3.1
вместо00:24-03:06
), например. Список также гибкий. Может быть списком / коллекцией, массивом, разделенной разделителем строкой, печать каждой строки в STDOUT и т. Д.
Пожалуйста, укажите, какой выбор вывода вы сделали.Примечание. Вам не разрешено выводить суммы таймфреймов, как указано выше, это упоминается только как пояснение. Вы должны вывести временные рамки, в том числе немного до и после него. - Удары оборачиваются от
12:00
до00:30
. Так что, еслиn=14
два таймфрейма11:29-00:31
и11:59-01:01
. - Вход будет в диапазоне
1 <= n <= 90
, где 90 - общая сумма всех возможных ударов. - Временные рамки, которые вы возвращаете, могут быть в любом порядке.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
(все используют 1 минуту до / после таймфреймов и ведущих нулей)
Input: 8
Ouput:
[00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01]
Input: 14
Output:
[00:29-04:01, 00:59-04:31, 02:59-05:01, 04:29-06:31, 05:59-07:01, 11:29-00:31, 11:59-01:01]
Input: 90
Output:
[00:29-00:01, 00:59-00:31, 01:29-01:01, 01:59-01:31, 02:29-02:01, 02:59-02:31, 03:29-03:01, 03:59-03:31, 04:29-04:01, 04:59-04:31, 05:29-05:01, 05:59-05:31, 06:29-06:01, 06:59-06:31, 07:29-07:01, 07:59-07:31, 08:29-08:01, 08:59-08:31, 09:29-09:01, 09:59-09:31, 10:29-10:01, 10:59-10:31, 11:29-11:01, 11:59-11:31]
Input: 1
Output:
[00:29-00:31, 00:59-01:01, 01:29-01:31, 02:29-02:31, 03:29-03:31, 04:29-04:31, 05:29-05:31, 06:29-06:31, 07:29-07:31, 08:29-08:31, 09:29-09:31, 10:29-10:31, 11:29-11:31]
Input: 2
Output:
[00:29-01:01, 00:59-01:31, 01:59-02:01]
code-golf
arithmetic
date
clock
Кевин Круйссен
источник
источник
.4
/.6
/.9
/.1
разрешено (это 6 минут, как вы заявили::24
/:36
/:54
/:06
).Ответы:
APL (Dyalog Classic) , 34 байта SBCS
Попробуйте онлайн!
Это решение использует
⎕io←1
(индексирование на основе 1).Справа налево:
⍳12
является1 2 3...12
⍪
превращает его в высокую тонкую матрицу 12x11,
добавляет столбец 1 с слева⍪⍨
объединяет одну и ту же матрицу по вертикали, так что теперь это матрица 24x2,
выравнивает матрицу в мажорном порядке, она становится вектором размера 48:1 1 1 2 1 3...1 12 1 1 1 2...1 12
+\
частичные суммы:1 2 3 5 6 9...
∘.-⍨
различия между каждой парой элементов, матрица 48x48⍉
транспонирования⎕=
логическая матрица 48x48 с 1 с, где бы ни происходил оцененный input (⎕
)⍸
пары координат, где 1.5×
разделить их пополам.4 .1∘+¨
добавить 0,4 к первой и 0,1 ко второй координате в каждой паре12|
по модулю 12∪
уникальныйисточник
.1
на выходе? Также хороший ответ.<sup>SBCS</sup>
сослаться на него или написать так же, как ответ Адама.⍸
не в Dyalog Classic. И да, я знаю, что это явно разрешено, я просто хотел узнать, сколько минут0.1
в выводе;)JavaScript (ES6), 104 байта
Печатает временные интервалы в
H.MM,H.MM
формате.Попробуйте онлайн!
Использует по существу тот же алгоритм, что и нерекурсивная версия ниже.
Нерекурсивная версия, 117 байт
Выводит разделенную пробелами строку временных интервалов в
H.MM,H.MM
формате.Контрольные примеры
Показать фрагмент кода
комментарии
источник
APL (Dyalog Unicode) ,
6259 байт SBCSПолное тело программы. Подсказки для
n
. Распечатывает список из двух элементов с использованием десятичных часов.Попробуйте онлайн!
⍳24
ɩ ndices 1 ... 2448⍴
циклический г eshape длиной 48, то есть 1 ... 12 ... 12,1.5×
умножить половину на это⊂
enclose (чтобы использовать весь этот массив в качестве правого аргумента для каждого левого аргумента)(
…),/¨
Для каждого из перечисленных ниже вернуть все подсписки этой длины:⍳48
ɩ ndices 1 ... 48l←
хранить вl
(для л engths)Теперь у нас есть все возможные списки периодов времени для каждой возможной длины цикла.
,/
объединить (букв. сокращение-объединение) списки подсписков⊃
раскрыть (потому что снижение понизило рейтинг с 1 до 0)(
…)¨
Применить следующую функцию к каждому:⊢/
последний (горит справа-сокращение) элемент (время окончания)⊃,
предварять первый элемент (время начала)¯.1 .1+
добавить отрицательные и положительные десятые к тем(
…)/
Отфильтруйте эти пары начала и конца с помощью:⍳12
ɩ ndices 1 ... 121,¨
добавить1
к каждому∊
ε NLIST (Flatten)48⍴
циклический г eshape длиной 48, т.е. 1,1,1,2 ... 1,11,1,12⊂
enclose (чтобы использовать весь этот массив в качестве правого аргумента для каждого левого аргумента)l+/¨
для каждого изl
(1… 48) вернуть суммы всех подсписков этой длины∊
ε NLIST (Flatten)⎕=
сравнить числовой ввод с этим∪
вернуть только уникальные элементы (пары начало-конец)источник
0.1
0.5
может стать.1
.5
Python 3 ,
118116 байтПопробуйте онлайн!
Временные рамки представляются в виде
(t1, t2)
,t1
иt2
будучи десятичной , представляющие часы. Смещение составляет.1
или 6 минут.источник
Пакет, 196 байт
Объяснение:
t
это время , в течение полутора часов, начиная с0
для00:30
. Количество ударов в момент времени т тогда1
,1
,1
,2
,1
, и3
т.д. Вычитание1
дает последовательность0
,0
,0
,1
,0
, и2
т.д. , которые целые числа чередоваться с нулями. Это может затем быть получено путем умножением почленного последовательности0
,0
,1
,1
,2
, и2
т.д. с последовательностью0
,1
,0
,1
,0
, и1
т.д. Оба из этих последовательностей могут быть легко рассчитаны с использованием по модулю и (целое число) деления.Затем остается зациклить все 23 возможных времени запуска, затем взять все 24 времени удара и вычесть количество ударов из входных данных, напечатав время, когда результат равен нулю.
Код проваливается после цикла, но никакого вреда не причиняется, так как ввод не может быть больше 90.
источник
APL NARS, 559 байтов
h (n) или l (n) возвращает все репрезентативные интервалы в 0-24 часа, которые имеют n тактов. h (n) имеет формат часов 0..11.0..59; вместо этого l (n) имеет формат часов как тест 0..23.0..59
источник