Думайте о дороге как о числовой линии, начинающейся 0
и продолжающейся до бесконечности:
.................................................................
На дороге две машины: C
а R
. C
это полицейский, который пытается поймать R
, грабитель. C
начинается с 0
и R
начинается где-то на дороге:
C.............................R..................................
Полицейский уже движется - он преследует грабителя. У него постоянная скорость. Грабитель только что запрыгнул в его машину. Он ускоряется. Каждый тик, скорость грабителя увеличивается на его ускорение.
Скажем, скорость полицейского равна, 7
а скорость грабителя равна 1
. Если грабитель начинает 30
, это то, как дорога будет выглядеть каждый тик:
C.............................R..................................
.......C.......................R.................................
..............C..................R...............................
.....................C..............R............................
............................C...........R........................
...................................C.........R...................
..........................................C........R.............
.................................................C........R......
После последней отметки выше скорость грабителя равна скорости полицейского, и он все еще впереди. Поскольку полицейский движется с постоянной скоростью, а грабитель все еще ускоряется, грабитель убегает, поэтому вы выводите истинное значение. Однако, если скорость полицейского была 9
...
C.............................R..................................
.........C.....................R.................................
..................C..............R...............................
...........................C........R............................
....................................C...R........................
.............................................X...................
... затем полицейский догоняет грабителя, прежде чем грабитель может уйти (помеченный знаком X
), поэтому вы выводите значение фальси.
Твое задание
Учитывая три входа - скорость полицейского, положение грабителя и ускорение грабителя - определяют, уйдет ли грабитель или нет.
правила
- Коп всегда начинается в
0
. - Все входные данные будут положительными целыми числами.
- Полицейский ловит грабителя, если после какого-либо тика позиция копа больше или равна позиции грабителя.
- Грабитель убегает, когда его еще не поймали, и его скорость больше, чем у полицейского.
- Ваша программа должна завершиться после вывода.
- Грабитель ускоряется, прежде чем он перемещает каждый тик.
Тестовые случаи
Cop Speed, Robber Position, Robber Acceleration -> Output
7, 30, 1 -> truthy
9, 30, 1 -> falsey
2, 1, 3 -> truthy
100, 100, 50 -> truthy
60, 60, 20 -> falsey
10, 1, 1 -> falsey
10, 50, 2 -> truthy
11, 50, 2 -> truthy
12, 50, 2 -> truthy
13, 50, 2 -> truthy
14, 50, 2 -> truthy
15, 50, 2 -> truthy
16, 50, 2 -> falsey
17, 50, 2 -> falsey
18, 50, 2 -> falsey
100, 451, 10 -> truthy
Ссылка на реализацию Python 3, которая также создает визуал: попробуйте онлайн!
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
источник
robber acceleration, cop speed, robber position
вместо этого)?Ответы:
Желе , 9 байт
Попробуйте онлайн!
Порт Лики Нун Python 3 ответ.
(полная программа) Принимает аргументы в порядке
acceleration, position, speed
.источник
Python 3 , 29 байт
Попробуйте онлайн!
объяснение
Позиция полицейского во время
t
являетсяst
.Позиция грабителя во время
t
находитсяa(t)(t+1)/2 + p
.Расстояние от полицейского до грабителя подписано
(a/2)t^2 + (a/2-s)t + p
.Он никогда не достигает нуля, если дискриминант отрицательный, дискриминантное существо
(a/2 - s)^2 - 4(a/2)(p) = [(a-2s)^2-8ap]/4
имеет тот же знак, что и(a-2s)^2-8ap
.источник
(a/2)t^2 + (a/2-s)t + p = 0 -> 10t^2 - 50t + 61 = 0
? Например, для 60, 61, 20 грабитель легко уходит (решения уравнения: 2.1 и 2.9, оба между 2 и 3).Japt , 13 байт
Проверьте это онлайн!
объяснение
U
,V
ИW
являются неявными входами. СначалаUo0W
мы создаем диапазон [0, W, 2 * W, ...], пока он не достигнетU
.x
затем суммирует это, которое показывает, как далеко ходит грабитель до достижения скорости полицейского. Мы будем называть это р .Теперь, как далеко коп проходит в это время? Мы можем вычислить это с помощью U * (U // W - 1) , который может быть изменен на (U * U) // W - U . Мы назовем это с .
Теперь для последнего шага: грабитель уходит? Все, что нам нужно сделать здесь, это проверить, если c <r + V или переставить, c - V <r .
источник
Кубически 61 байт
Попробуйте онлайн! Для этого , чтобы работать в TIO, вам , возможно , придется заменить
&
с&1
из - за ошибки в интерпретаторе.Это бесстыдный порт ответа Лики Нун . Ввод в форме
a s p
, гдеa
ускорение грабителя, скоростьs
полицейского и положениеp
грабителя.Если ускорение слишком велико, это не удастся. Я не знаю, насколько высокой будет поддержка этой программы, но я знаю, что она не выше 1260 . Ограничивающим фактором является то, что он хранит ускорение в кубе и проверяет, решен ли куб, проверяя только, если сумма верхней грани равна 0 (неполная проверка). Кажется, он работает для ускорения = 50, но я не проверял, насколько высоко он может подняться.
Как это устроено
источник
6
В%6
и*6
могут быть удалены , поскольку они в настоящее время можно назвать неявно.Pyth , 11 байт
Это берет их в следующем порядке:
Robber Acceleration, Cop Speed, Robber Position
разделенные новой строкой (как показано в наборе тестов).Test Suite или попробуйте онлайн!
источник
Пайк , 14 байт
Порт полностью человеческого ответа на Python . Возвращает
1
за правду и0
за ложь.Попробуй это здесь!
объяснение
Пайк , 15 байт
Мой самый первый ответ Пайк! Порт моего Pyth-решения , навеянный представлением Leaky's Python . Возвращает
1
за правду и0
за ложь.Попробуй это здесь!
объяснение
источник
Python 2 , 62 байта
Попробуйте онлайн!
источник
Рубин ,
292725 байтПопробуйте онлайн!
Получил от 29 до 27, украдя идею умножения обеих сторон на 4. (Ответ Питона Нун на Python)
Получил от 27 до 25, удалив символы вокруг параметров лямбда (спасибо, полностью человек)
источник
hit
вh
или подобное. Вы также можете сохранить некоторые байты, перейдя от метода к процедуре, например так:->c,p,a{(c-a*0.5)**2<2*p*a}
collision
в своей ссылке TIO правильное имя метода.c,p,a
.C # (.NET Core) , 33 байта
Попробуйте онлайн!
Я чувствую, что это где-то не так, но это проходит для всех тестовых случаев, поэтому возможно, что просто не будет никаких тестовых случаев, когда полицейский обгонит грабителя за один тик, или это может сработать, несмотря на мои оговорки.
источник
Python 2 ,
313029 байт-1 байт благодаря мистеру Xcoder.
Начал как порт ответ Ruby .
Попробуйте онлайн!
источник
.5
вместо0.5
> _>a/2
использует целочисленное деление, это может пойти не так?Swift 3 , 55 байт
Обратите внимание, что я объявил переменную,
t
потому что в противном случае выражение было бы слишком сложным, чтобы его можно было решить за разумное время (ошибка Свифта!).Тестирование.
или 55 байт , точный эквивалент замыкания (мне нужна последняя часть, потому что это сложная конструкция):
Тестирование.
Swift 3 , 57 байт
Тестирование.
источник
Python 2 , 30 байт
Попробуйте онлайн! У полицейского есть
c/a
галочки, чтобы поймать грабителя, после чего он ускорил полицейского. На первом тике полицейский выигрываетc-a
у грабителя, а на последнем тике он только получаетc%a
. Таким образом, общее количество, которое может получить полицейский, является произведением количества тиков и среднего расстояния на тика. Это просто по сравнению с первоначальным лидерством грабителя.источник
TI BASIC (серия TI-83/84), 18 байтов
Еще один порт влиятельного решения Ruby от itdoesntwork .
выполнение
Порядок ввода - скорость полицейского, позиция грабителя, ускорение грабителя.
источник
Сетчатка , 79 байт
Попробуйте онлайн! Объяснение:
Преобразовать ввод в унарный.
Освободите место для скорости грабителя.
Ускоряйте грабителя на каждом проходе.
Отодвиньте грабителя от полицейского.
Переместите полицейского к грабителю.
Полицейский поймал грабителя?
Грабитель превосходит полицейского?
источник
Рекурсива ,
1916 байтПопробуйте онлайн!
источник