Вызов
Учитывая количество секунд после полуночи, выведите наименьший угол между любыми двумя стрелками на циферблате, используя как можно меньше байтов.
Вы можете предположить, что количество секунд всегда меньше 86400. Углы могут быть представлены в градусах или радианах.
Справочное решение по адресу: http://ideone.com/eVdgC0
Тестовые случаи (результаты в градусах)
0 -> 0
60 -> 0.5
600 -> 5
3600 -> 0
5400 -> 45
6930 -> 84.75
50000 -> 63.333
Clarificarions
- Часы имеют 3 стрелки: часы, минуты и секунды.
- Все стрелки движутся непрерывно, поэтому часовые и минутные стрелки можно найти между градациями на циферблате.
Ответы:
CJam,
3635343230 байтВывод в радианах. Я проверил решения для всех 86400 возможных входов.
Попробуйте онлайн в интерпретаторе CJam .
идея
Поскольку 2π радиан - это полный круг, каждый минутный / секундный интервал на часах составляет 2π / 60 = π / 30 радиан в ширину.
Таким образом, деление количества секунд на π / 30 дает положение секундной стрелки.
Минутная стрелка перемещается на одну шестидесятую часть темпа секундной стрелки, поэтому деление результата сверху на 60 дает положение минутной стрелки.
Аналогично, деление последнего результата на 12 дает положение часовой стрелки.
Обратите внимание, что наши три частных сверху не обязательно находятся в диапазоне [0,2π).
Вычисляя все девять возможных различий в углах рук, мы получаем три 0 (угловое расстояние между рукой и самой собой) и шесть расстояний между разными руками.
Если ближайшие руки находятся на половине, не включающей 12 , одно из отличий сверху будет желаемым результатом (мод 2π ).
Однако в 01:55:30 (например) часовая стрелка находится под углом 1,008 рад (57,75 градуса), а минутная стрелка - под углом 5,812 рад (333,00 градуса) от 12 , что дает разницу в 4,804 рад (275,25 град). Вычитая этот результат из полного круга, мы получаем угол, измеренный «в другом направлении», который равен 1,479 рад (84,75 рад).
Теперь вместо того, чтобы отображать каждый угол θ в [0,2π) и условно вычитать результат из π , мы можем просто вычислить arccos (cos (θ)) , поскольку cos является периодическим и четным, а arccos всегда дает значение в [ 0, π) .
Пропустив три наименьших результата (все ноль), четвертый наименьший будет желаемым результатом.
Код
Альтернативная версия (34 байта)
Вывод в градусах и тригонометрические функции не используются.
Попробуйте онлайн в интерпретаторе CJam .
источник
Mathematica, 40 байт
Пояснение: Позвольте
t
быть количество секунд с полуночи. Положение каждой рукиРассчитать абсолютное угловое расстояние между
x
градусами иy
градусами, мы можем изменитьy - x
диапазон на 360,[-180, 180]
а затем принять абсолютное значение. (Обратите внимание , что не существует никаких ограничений наx
иy
.) Таким образом , эта функция просто вычисляет попарные различияt/10-t/120
,6t-t/10
и6t-t/120
и делает это.источник
&
), и первый передаваемый аргумент называется внутри#
.Питон, 65
Расстояние, пройденное часовой, минутной и секундной стрелками, в единицах 1/60 круга равно
h,m,s = n/720, n/60, n/1
. Мы можем взять эти 60 модов, чтобы получить их положение на круге от0
до60
.Если мы возьмем их разницу 60 мод, мы получим количество единиц, что один перед другим. Мы берем все шесть возможных различий, находим мин, затем умножаем на,
6
чтобы масштабировать до360
градусов.Понимание двухслойного списка сначала выбирает из первых рук, как представлено
720
,60
или1
, затем выбирает другую руку из этого набора с первым выбором удаляется с помощью множества XOR.Я проверил это исчерпывающе в отношении кода ссылки.
источник
C #,
163152 байтаЭто создает каждую руку дважды для подсчета, а затем перебирает каждую комбинацию и находит минимальный угол между руками. Расчеты выполняются в 60 делениях, затем умножаются на 6, чтобы получить градусы.
Отступы для ясности:
Пример вывода:
источник
TI-BASIC, 17 байтов
Использует Денниса
arccos(cos(
для нормализации расстояний; однако вместо расчета всех парных расстояний он рассчитывает только триΔList([seconds],[minutes],[hours],[seconds]
.Эта программа ожидает
Degree
режим и возвращает ответ в градусах.РЕДАКТИРОВАТЬ:
5!
на один байт короче, чем120
.источник