Правило Нейсмита помогает определить продолжительность времени, необходимого для прогулки или похода, учитывая расстояние и подъем.
Учитывая непустой список высоты в точках, равномерно распределенных вдоль пути, и общее расстояние этого пути в метрах, вы должны рассчитать время, необходимое в соответствии с правилом Нейсмита.
Правило Нейсмита заключается в том, что вы должны отводить один час на каждые пять километров плюс дополнительный час на каждые 600 метров восхождения.
Входные данные должны быть взяты в метрах, которые гарантированно состоят из неотрицательных целых чисел, а выходные данные должны быть последовательно либо часами, либо минутами (но не обоими), и должны иметь возможность давать десятичные числа, где это применимо (неточности с плавающей запятой приемлемы) ,
Например, учитывая:
[100, 200, 400, 200, 700, 400], 5000
Для первых двух элементов у [100, 200]
вас есть 100 метров подъема, что составляет 10 минут. У [200, 400]
вас есть 200 метров подъема, что составляет 20 минут, [400, 200]
не поднимается, поэтому время для этого не добавляется. [200, 700]
500 метров подъема, что составляет 50 минут, и, наконец [700, 400]
, не поднимается. Один дополнительный час добавляется на расстояние в пять километров. Это составляет 140 минут или 2,333 ... часов.
Тестовые случаи
[0, 600] 2500 -> 1.5 OR 90
[100, 200, 300, 0, 100, 200, 300] 10000 -> 2.8333... OR 170
[40, 5, 35] 1000 -> 0.25 OR 15
[604] 5000 -> 1 OR 60
[10, 10, 10] 2000 -> 0.4 OR 24
[10, 25, 55] 1000 -> 0.275 OR 16.5
[10], 5125
или[10, 25, 55], 1000
действительными и должны ли обрабатываться?[10, 25, 55], 1000 -> 0.275 OR 16.5
Ответы:
R ,
444342 байтаПопробуйте онлайн!
-1 байт, используя
pmax
несколько других ответовПринимает входные данные как
A
запах иD
istance, и возвращает время в минутах.источник
JavaScript (ES6), 50 байт
Сохранено 1 байт благодаря ответу Джузеппе (деление на 10 в конце процесса)
Принимает вход как
([altitudes])(distance)
. Возвращает время в минутах.Попробуйте онлайн!
источник
05AB1E , 15 байтов
Попробуйте онлайн!
Возвращает время в минутах.
объяснение
источник
₄12//
вместо₄;6//
. Так очевидно +1 от меня.Haskell,
4746 байтовВозвращает время в часах.
Попробуйте онлайн!
источник
Python 2,
6260 байтСохранено 2 байта благодаря ovs.
Попробуйте онлайн!
Возвращает время в минутах.
источник
Perl 6 ,
453937 байт6 байтов сохранено благодаря Джо Кингу.
2 байта сохранены благодаря nwellnhof.
(Благодаря им обоим это больше не похоже на мое первоначальное представление :—).)
Попробуйте онлайн!
Первый аргумент - это список высот, второй аргумент - это длина пути.
Все дело в том, что угодно. Если выражение распознается как таковое, то каждый
*
является одним аргументом.Таким образом,
*.&{sum (.skip Z-$_)Xmax 0}/600
мы берем первый аргумент (первый вхождение*
) и используем для него блок с методоподобной конструкцией.&{}
. Блок принимает один аргумент (список), который входит в список$_
, так же.skip
как и этот список без первого элемента. Мы вычитаем исходный массив, элемент за элементом, из этого, используяZ-
. Застежка-молния прекращается, как только сокращается короткий список, и это нормально.Затем мы используем оператор перекрестного произведения
X
.list X(op) list
создает все возможные пары, где первый элемент находится в левом списке, а второй справа, и использует оператор(op)
для них. Результат возвращается как Seq (одноразовый список). Тем не менее, правый список имеет только один элемент, 0, так что он просто* max 0
, элемент за элементом. Это гарантирует, что мы считаем только восходящие части пути. Затем мы складываем это и делим на 600.Затем мы добавляем
*/5e3
, где*
происходит второй раз, и, таким образом, это второй аргумент, и делим его на 5000. Сумма - это время в часах. (Это более эффективно, чем время в минутах, так как нам нужно было бы умножить, и это*
должно быть отделено пробелом от WhwhatStar*
.)источник
X
X
, спасибо!X/
, просто разделив сумму на 10. 39 байт.&{}
(возвращает часы).ОК , 21 байт
Попробуйте онлайн! Злоупотребление ошибкой синтаксического анализа, где так
.1.012
же, как.1 .012
.-1 спасибо Стристер .
к , 23 байта
Попробуйте онлайн!
источник
{y+/0|1_-':x}..1.012*
на 21 байт? начать аккумулятор сy
.:/
Желе , 12 байт
Попробуйте онлайн!
-1 спасибо мистеру Xcoder .
источник
×.12
работает?Python 2 , 59 байт
Попробуйте онлайн!
возвращает часы в десятичном виде.
источник
Pyth , 15 байт
Полная программа, ожидает набор высот в качестве первого аргумента, расстояние в качестве второго. Возвращает время в минутах.
Попробуйте онлайн здесь или проверьте все тестовые случаи сразу здесь .
источник
APL (Dyalog Unicode) ,
21 2018 байтПопробуйте онлайн!
Традиционная функция, принимающая ввод (справа налево) как
1st ⎕
= Высота / Глубина,2nd ⎕
= Расстояние.Спасибо @ngn за
то, что он волшебник одинтри байта.Как это устроено:
источник
,0
не является необходимым,⍵
для проблемного теста должно быть,604
, а не604
⍺
и⍵
в старом коде на⎕
и слишком ленив, чтобы поместить заголовок / нижний колонтитул tradfn.,0
Бит , хотя? Золото.Java 8, 89 байт
Попробуйте онлайн.
Объяснение:
источник
Japt , 39 байт
Попробуйте онлайн!
Вероятно, можно сыграть в гольф немного больше.
источник
Stax , 17 байт
Запустите и отладьте его на staxlang.xyz!
Принимает все входные данные как плавающие, хотя это сохраняет байт только в распакованной версии. Вероятно, улучшается; только сейчас возвращаюсь к коду в гольф, я немного ржавый.
Распаковывается (20 байт) и объяснение:
0!012*s:-{0>f{A_:m|++
работает для интегральных входов для 21 байта без упаковки и до сих пор 17 упакованных.источник