Аналоговые часы имеют 2 стрелки *: часы и минуты.
Эти стрелки обвивают лицо часов с течением времени. Каждое полное вращение минутной стрелки приводит к 1/12 оборота часовой стрелки. 2 полных оборота часовой стрелки означают полный день.
Поскольку эти руки зафиксированы в одной центральной точке и вращаются вокруг этой точки, вы всегда можете рассчитать угол между руками. На самом деле есть 2 угла в любой момент времени; Больший и меньший (иногда они равны 180, но это не важно)
* У наших гипотетических часов нет секундной стрелки
задача
Учитывая время в 24-часовом формате, выведите меньший угол между стрелками в градусах. Если стрелки находятся прямо напротив друг друга (например, у 6:00
и 18:00
т. Д.), Выведите 180
правила
Входные данные может быть принята в качестве: - Разделитель разделена строка: 6:32
, 14.26
- 2 отдельных значения, строка или Интс: 6, 32
, 14, 26
- массив из 2 -х значений, строк или целых чисел: [6, 32]
,[14, 26]
Вы также можете дополнительно указать , что ваш ответ требует входов быть проложенными до 2 цифр (если вы берете строки), то есть: 06:32
, 06, 32
,[06, 32]
Вы также можете при необходимости изменить порядок входов, с минуту потом час, т.е. 32:6
, 32, 6
,[26, 14]
Час будет целочисленным значением между 0
и 23
(включительно) Минутой будет целочисленное значение между 0
и 59
(включительно)
Можно предположить, что минутная стрелка защелкивается с шагом 6 градусов вдоль грани (одно равномерно расположенное положение для каждого значения минут).
Можно предположить, что часовая стрелка защелкивается с шагом 0,5 градуса вдоль грани (одно равномерно расположенное положение для значение каждой минуты в значении часа)
Выходные данные должны быть указаны в градусах, а не в радианах. Вы можете включить трейлинг .0
для целых чисел
счет
Это код-гольф, поэтому побеждает меньшее количество байтов на каждом языке !
Testcases
Input: 06:32
Output: 4
Input: 06:30
Output: 15
Input: 18:32
Output: 4
Input: 06:01
Output: 174.5
Input: 00:00
Output: 0
Input: 00:01
Output: 5.5
Input: 12:30
Output: 165
Input: 6:00
Output: 180
Input: 23:59
Output: 5.5
00:59 -> 35.5
(небольшое значение с большим значением может привести к сбою некоторых реализаций). мОтветы:
JavaScript (ES6),
41 4039 байтПринимает входные данные как
(h)(m)
.Попробуйте онлайн!
Как?
Вместо того, чтобы работать непосредственно в диапазоне[ 0..360 ] , мы определяем временную переменную Икс в диапазоне [ 0..4 ] :
Угол в градусах определяется как:
Тем не менее, формула реализована немного по-другому в коде JS, так как мы определенно хотим избежать использования long
Math.abs()
иMath.min()
.Вместо вычисления абсолютного значения мы принудительно устанавливаем положительное значение в путем вычисления:[ 0..12 ]
И вместо того, чтобы вычислять минимум, мы определяем, в каком случае мы просто делаем побитовое И с - и именно поэтому мы выбрали интервал, ограниченный степенью в первую очередь.2 2
источник
Желе ,
1412 байтПопробуйте онлайн!
Монадическая ссылка, которая принимает время в виде списка из двух целых чисел: час, минута.
Спасибо @JonathanAllan за сохранение 2 байта!
объяснение
источник
(-180, 180]
который эквивалентен (мод 360). Эти встроенные ...Ø°
for360
и“<¿‘
for60,11
. Как такד<¿‘Iæ%Ø°AH
TIOMATL, 18 байт
Принимает два ввода часов с последующими минутами. Использует тот же метод, что и этот ответ
Попробуйте это на MATL Online
объяснение
источник
180
вместо вывода0
?Wolfram Language (Mathematica) ,
302928 байтПопробуйте онлайн!
версия без золота:
Аргумент функции
# = {h,m}
содержит час и минуту. Эта длина-два списка интерпретируется как вектор и скалярного произведения с{30,-5.5}
рассчитывается следующим образом :#.{30,-5.5} = 30*h-5.5*m
. Затем мы вычисляем симметричный модуль 360 сMod[#.{30,-5.5}, 360, -180]
учетом угла в интервале -180 .. + 180.Abs
принимает его абсолютное значение.Поскольку все задействованные операторы являются линейными, мы можем умножить и разделить все появляющиеся числа, однако они наиболее удобны. Вытаскивая коэффициент
5
из выражения и деля все числа в выражении на 5, количество байтов минимизируется.источник
Алхимик , 134 байта
Попробуйте онлайн!
объяснение
Начальная настройка. Вводит часы и минуты в
h
иm
, устанавливает текущий уголd
в 360 градусов (720 полугодий), устанавливаетa
для вычисления основного угла и устанавливает флаг вывода.Каждый час прибавляет 30 градусов, а каждая минута вычитает 5,5 градусов.
Хотя
r
(обратный) флаг не установлен, каждыйd
атом должен переместиться на одинa
атомb
. Это происходит после того, как все минуты исчерпаны, чтобы избежать «состояния гонки». Когдаa
атомов не осталось, установитеr
обратный поток.Обратите внимание, что это второе правило может запускаться несколько раз и даже может запускаться перед правилом начальной настройки. Это ничего не вредит, поэтому нет необходимости предотвращать это.
0x
Условие обрабатывает ребро случая: когда вход 6:00, нетa
атомов , когда программа завершается, но естьx
атомы , если конечный результат, по крайней мере 1 градус.Обратное: когда угол со знаком больше 180 градусов, переместите
b
атомы в,a
чтобы уменьшить угол вывода. Прекратите движение задним ходом, когда угол достигнет «360».Когда все атомы степени израсходованы, разделите на 2, чтобы получить угол на выходе.
После того, как это сделано, выведите ровно один раз, используя
f
флаг из начальной настройки.источник
Python 3.8 (предварительная версия) ,
4543 байта-2 байта благодаря Эрику .
Попробуйте онлайн!
h%12
- час в 12-часовом форматеh%12*30
- угол часовой стрелки в полный часm/2
- угол, в котором часовая стрелка перемещена вm
минутахh%12*30+m/2
- текущее положение часовой стрелки в виде углаm*6
- угол минутной стрелки (360°/60 = 6°
)источник
Stax , 15 байт
Запустите и отладьте его
m =
количество минут с полуночиd = 5.5 * m
min(d % 360, -d % 360)
.источник
C # (интерактивный компилятор Visual C #) ,
4745 байтПопробуйте онлайн!
источник
Древесный уголь , 22 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод как два целых числа. Объяснение:
источник
Perl 6 , 28 байт
Попробуйте онлайн!
Использует несколько уловок, украденных из других ответов и вычисляет
источник
Python 3 , 40 байт
Попробуйте онлайн!
h*30
- угол между полуднем и часом,h
когда минута равна0
; если час равен или больше 12, этот угол может быть равен или больше 360 °m*6
- угол между полуднем и минутной стрелкойm*.5
- угол, на который часовая стрелка переместилась вперед от полного часа послеm
минут (например, если это 4:24, часовая стрелка сместилась вперед на 12 градусов от положения, в котором она находилась в 4 часа)h*30-m*5.5
- один из двух углов между часовой стрелкой и минутной стрелкой; коэффициент дляm
IS ,5.5
потому чтоm*6-m*.5=m*5.5
; это все еще не ответ, потому что это может быть значение больше 360 ° (например: еслиh,m=13,0
) или меньше 0 ° (например: еслиh,m=12,30
)(h*30-m*5.5)%360
- это по модулю учитывает случаи, когда вычисленное выше значение не находится между 0 и 360 °; это все еще не ответ, потому что это может быть более широким из двух углов, в то время как мы хотим, чтобы самый узкий180-abs(180-(h*30-m*5.5)%360)
- это конечный результат; общее правилоx-abs(x-y)
эквивалентно томуmin(y,x-y)
, что даст правильный результатисточник
Tcl ,
71745954 байтаПопробуйте онлайн!
сохранено 5 байтов с помощью лямбда-выражения
источник
Python 3,
5857 байт-1 / -2 Благодаря @Shaggy
Наивная реализация, принимает входные данные в виде
[6,32]
. Некоторые байты, вероятно, могут быть сбриты с последней строки, особенно.Python 2,
5250 байтисточник
30*h-5.5*m
должен сэкономить вам пару байтов.def
-стиля также должна сохранять некоторые байты.Perl 5
-MList::Util=min -p
, 37 байтПопробуйте онлайн!
Принимает ввод в виде часов с последующими минутами в отдельной строке, поскольку он сэкономил несколько байтов.
источник
[R], 45 байт
источник
Japt , 16 байт
Попытайся
источник
> <> , 17 байт
Попробуйте онлайн! (6:32)
Принимает ввод как h, m в стеке.
объяснение
источник
05AB1E , 16 байтов
Принимает часы в качестве первого ввода, минуты в качестве второго.
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
В основном реализует следующую формулу:
источник
Pyret, 59 байт
источник