У меня тупой старый будильник с двумя кнопками: hourи minute. hourКнопка увеличивает час установленной сигнализации, а также minuteприращение минутного время набора сигнала тревоги. Тем не менее, некоторые умные дизайнеры поняли, что нажатие обеих кнопок должно иметь значение, и решили, что нажатие hourи minuteодновременное приведение будильника в положение 12:00 am
/ 0:00
. Ваша задача - смоделировать это поведение.
задача
Учитывая время начала и последовательность состояний кнопок, определите время окончания.
Начиная со времени начала, увеличивайте час для каждого вхождения (1,0)
, увеличивайте минуту для каждого вхождения (0,1)
и устанавливайте время 0:00
для каждого вхождения (1,1)
. Состояния (0,0)
следует игнорировать, поскольку они не соответствуют ни одной из нажатых кнопок.
При добавлении к минутам и часам, если минута / час превышает максимальное значение, установите для него значение 0
, т. Е. При увеличении минутного значения 59
следует установить минутное значение, 0
а при увеличении часового значения часов 23
следует установить часовое значение 0
. Приращение минуты / час значения выше их пределов не влияет на другое значение, например приращение минуты 10:59
урожайности 10:00
, а не 11:00
.
пример
Учитывая время ввода 13:58
и шаги [(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)]
,
(0,1)
, Это соответствует minuteнажатию. Время пришло13:59
.(0,1)
, Это соответствует minuteнажатию. Время пришло13:00
.(0,1)
, Это соответствует minuteнажатию. Время пришло13:01
.(0,0)
, Это соответствует ни одной из нажатых кнопок. Время, без изменений, сейчас13:01
(1,1)
, Это соответствует нажатию обеих кнопок. Время пришло0:00
.(1,0)
Это соответствует hourнажатию. Время пришло1:00
.
Так как мы заканчиваем 1:00
, это выход.
I / O
Ввод будет состоять из времени и последовательности состояний кнопок. Выход - один раз.
Время ввода и время вывода может быть
- 2-кортеж
(hour, minute)
или(minute, hour)
в -24
часовое времени , например,(13, 30)
(hour
колеблется от0
до23
иminute
находится в диапазоне от0
до59
) - такой же, как предыдущий, но в
12
через час и логическое значениеam
/pm
переключатель (hour
находится в диапазоне от0
до11
или12
и1
к11
сminute
с0
к59
). - количество минут, начиная с
0:00
810 (от 0 до 1439 включительно) - любой другой формат, который кодирует ту же информацию
Последовательность состояний кнопок является представлением списка булевых 2-кортежей, например:
- список кортежей:
[(0,1),(1,0),(0,0),(1,1)]
- строка, разделенная пробелом:
"01 10 00 11"
- строка:
"01100011"
- в четвертичный период:
[1,2,0,3]
- конвертируется в целое число:
99
- любой другой формат, который кодирует ту же информацию
Тестовые случаи
time,steps -> output
06:49,[(0, 1)] -> 06:50
12:23,[(1, 0)] -> 13:23
02:23,[(0, 1), (1, 0)] -> 03:24
21:40,[(0, 1), (0, 1), (0, 1), (0, 1)] -> 21:44
13:10,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 1)] -> 00:02
21:33,[(1, 0), (0, 1), (1, 0), (0, 1)] -> 23:35
14:21,[(0, 1), (0, 1), (0, 1)] -> 14:24
02:39,[(0, 0), (0, 1)] -> 02:40
16:07,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1)] -> 19:16
17:55,[(0, 1), (1, 0), (0, 1)] -> 18:57
15:55,[(1, 0), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0)] -> 23:00
22:11,[(0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1)] -> 00:19
03:58,[(1, 0), (0, 0), (0, 0), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1)] -> 07:03
13:02,[(0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0)] -> 16:06
04:37,[(1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (1, 0)] -> 08:47
00:01,[(0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1)] -> 03:08
02:58,[(1, 0), (1, 0), (0, 1)] -> 04:59
01:43,[(0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1)] -> 04:52
07:54,[(1, 0), (0, 1), (1, 0), (1, 0), (1, 1)] -> 00:00
09:33,[(0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1)] -> 10:38
09:01,[(0, 1), (0, 1)] -> 09:03
19:04,[(0, 1), (1, 0), (0, 1), (1, 0)] -> 21:06
11:17,[(0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 1), (0, 1), (0, 1)] -> 00:02
19:32,[(0, 1), (1, 0), (0, 1), (1, 0), (1, 0), (1, 0)] -> 23:34
17:31,[(0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 0), (1, 1), (0, 1)] -> 00:01
06:46,[(0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (1, 0), (1, 0), (0, 1), (1, 0), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1)] -> 18:16
[h, m]
формате с четвертичными шагами .[[initialHour, initialMinute], [hourPressed1, minuitePressed1], [hourPressed2, minuitePressed2], ...]
?Ответы:
Желе , 13 байт
Попробуйте онлайн!
источник
C
8987 байтСпасибо @Jonathan Frech за сохранение двух байтов!
Попробуйте онлайн!
источник
Желе ,
21(17?) 19 байт17 байт? - Если формат ввода:
[[initHour, initMinute], [a1, b1], [a2, b2], ...]
приемлем, у нас будет монадическая ссылка, и мы можем удалитьW;
из начала второй строки.Примечание: это теперь сходится к ответу Эрика «Outgolfers Jelly» , поэтому я больше не буду беспокоиться о гольфе (я этого не видел) ...
Диадическая ссылка, принимающая список начального времени в виде целых чисел
[hour, minute]
(24-часовой) слева и список состояний кнопок[[hourPressed, minPressed], ...]
справа,который снова возвращает список времени конечного результата в виде целых чисел
[hour, minute]
(24-часовой).Попробуйте онлайн! или посмотрите набор тестов
Как?
источник
⁹Ạ¤
наẠ}
. Еще -2 за использование разрешенного формата. Наконец, еще один -1, потому что цепочка передµ
здесь называетсяPython 2 ,
8475 байтПопробуйте онлайн!
Функция, которая принимает время в виде кортежа (час, минута); выводит так же.
источник
all(b)
вместоb[0]&b[1]
:lambda c,a:reduce(lambda t,b:all(b)and((t[0]+b[0])%24,(t[1]+b[1])%60)or(0,0),a,c)
lambda(h,m),(d,e):
это сопоставление с образцом в Python !?Сетчатка , 75 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Удалите все, вплоть до последнего двойного нажатия кнопки, заменив его пустым временем (если это последнее нажатие кнопки).
Преобразовать в одинарный.
Сортировать минуты до конца.
Добавьте часы вместе.
Добавьте минуты вместе, но оставьте часы раздельными.
Уменьшите часы и минуты по модулю 24 или 60 в зависимости от ситуации.
Преобразовать в десятичную.
Форматировать до двух цифр.
источник
Python 3,
135117115 байт-20 байт благодаря Джонатану Фреху
Попробуйте онлайн!
Занимает время в виде списка в форме
[hour, minute]
.источник
(m[0]+1)
с-~m[0]
иif m[0]<23 else 0
с*(m[0]<23)
.b
иc
всегда являются булевыми значениями, их можно заменитьb+c>1
наb&c
.Haskell , 58 байт
Попробуйте онлайн! Пример использования:
foldl(#) (23,58) [(0,1),(1,0),(0,0),(0,1),(0,1)]
.источник
JavaScript (ES6), 55 байт
Принимает ввод в синтаксисе карри со временем запуска в виде массива
[min, hour]
и шагами в виде четвертичного массива. Время вывода в том же формате, что и время ввода.Тестовые случаи
Показать фрагмент кода
источник
Perl 6 , 40 байт
Попробуйте онлайн!
Принимает список, содержащий время начала, после которого нажимаются кнопки. Возвращает время окончания. Времена и кнопки являются
(hour, minute)
парами. 24-часовое времяисточник
Perl 5 , 70 байт
69 байтов кода + 1 для
-n
флагаПопробуйте онлайн!
Формат ввода
hh:mm,abcdabcdabcdaddccbbaa
где:
Пространства или другие разделители между прессами незначительны.
объяснение
источник
Swift ,
10696 байт-10, спасибо Xcoder
Попробуйте это на Ideone!
Функция примет начальное значение и массив кортежей и вернет последнее время.
источник
func x(m:(Int,Int),n:[(Int,Int)]){let i=n.reduce(m){($0.0+$1.0,$0.1+$1.1)};print(i.0%24,i.1%60)}
. Это также избавляет отtypealias
.Terrapin Logo, 304 байта
Не оптимизирован; много пробелов.
Принимает список в качестве первого входа и начальный час + минуту (отдельные входы) в качестве второго и третьего соответственно.
Я не могу скопировать + вставить логотип Terrapin, так как это пробная версия, вот так :(
источник
R 61 байт
Принимается
I
как вектор длины 2c(H,M)
иB
как список векторов длины 2 для кнопокc(H,M)
. ПеребираетB
, установкаI
вc(0,0)
случае , если сумма2
. Тогда это модов в конце. В заголовке также есть функция для перевода нажатий кнопок в правильный формат R, если вы хотите проверить их все; он принимает массив[(H,M),...]
в виде строки.Попробуйте онлайн!
источник
C # (.NET Core) , 93 байта
Попробуйте онлайн!
Принимает ввод как в трине, с 0 == (1,0), 1 == (0,1), 2 == (1,1), и время в массиве с индексом 0 является часами, а 1 - минутами. Изменяет временной массив на месте.
источник
Pyth, 22 байта
Попробуй это здесь.
источник
Mathematica, 54 байта
Анонимная функция. Принимает список из 2 кортежей в качестве входных данных и возвращает 2-кортеж в качестве выходных данных.
источник
Scala , 116 байт
Поэтому я просто беру время начала в качестве двух первых параметров моего функционала (
h
иm
), а входную последовательность я принимаю как массив [Tuple2].Интересно ... я должен посчитать объявление func (
def time(h:Int,m:Int,a:Array[Tuple2[Int,Int]]):Tuple2[Int,Int]={
плюс окончание}
) в счетчике байтов?Попробуйте онлайн!
источник