Учитывая дорогу ascii-art и время, которое потребовалось мне, чтобы пересечь ее, скажите мне, ускоряюсь ли я.
Единицы
Расстояние в произвольной единице d
. Время в произвольной единице t
.
Дорога
Вот простая дорога:
10=====
Эти 10
средства 10 d
в t
. Это ограничение скорости на дороге. Дорога имеет 5 =
с, так что его d
5. Таким образом, если пересечь эту дорогу в 0,5 t
, я пошел 10 d
за t
, потому что 5 / 0,5 = 10. предел скорости этой дороги 10, так что я остался в пределах ограничения скорости.
Но если я пересечь эту дорогу в 0.25 t
, я пошел 20 d
за t
, потому что 5 / 0,25 = 20. Ограничение скорости этой дороги 10, так что я пошел 10 за ограничение скорости.
Примеры и расчеты
Обратите внимание, что ввод 1 - это время, которое я потратил на дорогу, а ввод 2 - сама дорога.
Вот сложная дорога:
Input 1: 1.5
Input 2: 5=====10=====
Самый быстрый я мог бы ( по закону) пошли на первой дороге (первые 5 =
сек) составляет 5 d
в t
. Поскольку 5 (расстояние), деленное на 5 (ограничение скорости), равно 1, самое быстрое, что я мог бы сделать на этой дороге, - 1 t
.
На следующей дороге ограничение скорости составляет 10, а расстояние также равно 5, самое быстрое, что я мог преодолеть, это 0,5 (5/10). Суммируя минимальное количество раз, мы получим 1,5, что означает, что я ехал именно с ограничением скорости.
Примечание: я знаю, что, возможно, я ехал очень быстро на одной дороге и очень медленно на другой, и все еще проезжал 1.5, но примите здесь лучшее.
Последний пример:
Input 1: 3.2
Input 2: 3.0==========20===
Длина первой дороги 10 и ограничение скорости 3, поэтому минимальное время составляет 3,33333 ... (10/3).
Длина второй дороги 3 и ограничение скорости 20, поэтому минимальное время составляет 0,15 (3/20).
Суммируя время, мы получаем результат в 3.483333333 ... Я пересек его в 3.2, поэтому мне пришлось куда-то ускоряться.
Заметки:
- Вы должны вывести одно отдельное значение, если я, несомненно, ускоряюсь, и другое, если это не так.
- Ваша программа или функция может требовать ввода или вывода для завершения новой строки, но, пожалуйста, укажите это в своем представлении.
- Ваш первый вход будет моей скоростью. Это будет положительное число с плавающей точкой или целое число или строка.
- Ваш второй вход будет дорога. Это всегда будет соответствовать регулярному выражению
^(([1-9]+[0-9]*|[0-9]+\.[0-9]+)=+)+\n?$
. Вы можете проверить потенциальные входы здесь, если вы заинтересованы. - Вы можете получить входные данные в 2 параметрах функции или программы, в 2 отдельных файлах, из STDIN дважды или из строки через пробел, переданной в STDIN, функцию, файл или параметр командной строки.
- Если вы хотите, вы можете изменить порядок ввода.
- Любые вопросы? Спросите ниже в комментариях и счастливого кода для игры в гольф !
^(([1-9]+[0-9]*|(?!0\.0+\b)[0-9]+\.[0-9]+)=+)+\n?$
. (Это было бы чище, если смотреть сзади, но тогда ему понадобился бы движок .Net)