Piense en una carretera como una recta numérica, que comienza 0
y continúa indefinidamente:
.................................................................
Hay dos autos en la carretera: C
y R
. C
es el policía que intenta atrapar R
, el ladrón. C
comienza en 0
, y R
comienza en algún lugar del camino:
C.............................R..................................
El policía ya se está moviendo, está persiguiendo al ladrón. Él tiene una velocidad constante. El ladrón saltó a su auto. El esta acelerando. Cada tic, la velocidad del ladrón aumenta con su aceleración.
Digamos que la velocidad del policía es 7
y la aceleración del ladrón es 1
. Si el ladrón comienza 30
, así es como se vería el camino en cada tic:
C.............................R..................................
.......C.......................R.................................
..............C..................R...............................
.....................C..............R............................
............................C...........R........................
...................................C.........R...................
..........................................C........R.............
.................................................C........R......
Después del último tic arriba, la velocidad del ladrón es igual a la del policía, y él todavía está por delante. Como el policía se está moviendo a una velocidad constante y el ladrón todavía se está acelerando, el ladrón escapa, por lo que genera un valor verdadero. Sin embargo, si la velocidad del policía hubiera sido 9
...
C.............................R..................................
.........C.....................R.................................
..................C..............R...............................
...........................C........R............................
....................................C...R........................
.............................................X...................
... entonces el policía alcanza al ladrón antes de que el ladrón pueda escapar (marcado por el X
), por lo que genera un valor falso.
Tu tarea
Dadas tres entradas: la velocidad del policía, la posición del ladrón y la aceleración del ladrón, determinan si el ladrón se escapará o no.
Reglas
- El policía siempre comienza a las
0
. - Todas las entradas serán enteros positivos.
- El policía atrapa al ladrón si, después de cualquier tic, la posición del policía es mayor o igual que la posición del ladrón.
- El ladrón se escapa cuando aún no lo han atrapado y su velocidad es mayor que la del policía.
- Su programa debe terminar después de la salida.
- El ladrón acelera antes de mover cada tic.
Casos de prueba
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
Implementación de Python 3 de referencia que también crea un visual: ¡ Pruébelo en línea!
Este es el código de golf , por lo que la respuesta más corta en bytes gana.
fuente
robber acceleration, cop speed, robber position
lugar)?Respuestas:
Jalea , 9 bytes
Pruébalo en línea!
Port of Leaky Nun's Python 3 respuesta.
(programa completo) Toma los argumentos en orden
acceleration, position, speed
.fuente
Python 3 , 29 bytes
Pruébalo en línea!
Explicación
La posición del policía en el momento
t
esst
.La posición del ladrón en el momento
t
esa(t)(t+1)/2 + p
.La distancia firmada del policía al ladrón es
(a/2)t^2 + (a/2-s)t + p
.Nunca llega a cero si el discriminante es negativo, siendo el discriminante
(a/2 - s)^2 - 4(a/2)(p) = [(a-2s)^2-8ap]/4
, que tiene el mismo signo que(a-2s)^2-8ap
.fuente
(a/2)t^2 + (a/2-s)t + p = 0 -> 10t^2 - 50t + 61 = 0
? Por ejemplo, para 60, 61, 20 el ladrón se escapa fácilmente (las soluciones de la ecuación: 2.1 y 2.9 son ambas entre 2 y 3).Japt , 13 bytes
¡Pruébelo en línea!
Explicación
U
,V
yW
son las entradas implícitas. Primero,Uo0W
creamos el rango [0, W, 2 * W, ...] hasta que llegueU
.x
luego suma esto, lo que da qué tan lejos viaja el ladrón antes de alcanzar la velocidad de policía. Llamaremos a esto r .Ahora, ¿qué tan lejos viaja el policía en este momento? Podemos calcular esto usando U * (T // W - 1) , que se puede reordenarse para (T * T) // W - T . Llamaremos a esto c .
Ahora para el paso final: ¿se escapa el ladrón? Todo lo que necesitamos hacer aquí es verificar si c <r + V , o reorganizado, c - V <r .
fuente
Cúbicamente , 61 bytes
Pruébalo en línea! Para que esto funcione en TIO, es posible que tenga que sustituir
&
con&1
debido a un error en el intérprete.Este es un puerto descarado de la respuesta de Leaky Nun . La entrada está en la forma
a s p
, dondea
está la aceleración del ladrón,s
la velocidad del policía yp
la posición del ladrón.Si la aceleración es demasiado alta, esto fallará. No sé qué tan alta aceleración soportará este programa, pero sé que no es superior a 1260 . El factor limitante es que almacena la aceleración en el cubo y comprueba si el cubo está resuelto comprobando solo si la suma de la cara superior es 0 (una comprobación incompleta). Parece que funciona para la aceleración = 50, pero no lo he probado para ver qué tan alto puede llegar.
Cómo funciona
fuente
6
in%6
y*6
se pueden eliminar como ahora se pueden llamar implícitamente.Pyth , 11 bytes
Esto los lleva en este orden:
Robber Acceleration, Cop Speed, Robber Position
separados por una nueva línea (como se muestra en el conjunto de pruebas).Test Suite o Pruébelo en línea!
fuente
Pyke , 14 bytes
Puerto de la respuesta de Python totalmente humana . Retornos
1
por verdad y0
por falsedad.Pruébalo aquí!
Explicación
Pyke , 15 bytes
¡Mi primera respuesta de Pyke! Solución Port of my Pyth , inspirada en el envío de Python de Leaky . Retornos
1
por verdad y0
por falsedad.Pruébalo aquí!
Explicación
fuente
Python 2 , 62 bytes
Pruébalo en línea!
fuente
Ruby ,
292725 bytesPruébalo en línea!
Obtuve del 29 al 27 robando la idea de multiplicar ambos lados por 4. (la respuesta de Python de Leaky Nun)
Obtuve del 27 al 25 eliminando los parámetros de los parámetros lambda (gracias totalmente humano)
fuente
hit
deh
o similar. También puede guardar algunos bytes cambiando de un método a un proceso, así:->c,p,a{(c-a*0.5)**2<2*p*a}
collision
en su enlace TIO con el nombre del método correcto.c,p,a
.C # (.NET Core) , 33 bytes
Pruébalo en línea!
Siento que esto está fuera de lugar en alguna parte, pero pasa para todos los casos de prueba, por lo que es posible que simplemente no haya casos de prueba en los que el policía supere al ladrón por un solo tic, o podría funcionar a pesar de mis reservas.
fuente
Python 2 ,
313029 bytes-1 byte gracias al Sr. Xcoder.
Comenzó como un puerto de la respuesta de Ruby .
Pruébalo en línea!
fuente
.5
en lugar de0.5
> _>a/2
usa división entera, ¿podría salir esto mal?Swift 3 , 55 bytes
Tenga en cuenta que he declarado la variable
t
porque la expresión sería demasiado compleja para ser resuelta en un tiempo razonable de lo contrario (¡culpa de Swift!).Banco de pruebas.
o 55 bytes , cierre exacto equivalente (necesito la última parte porque es una construcción compleja):
Banco de pruebas.
Swift 3 , 57 bytes
Banco de pruebas.
fuente
Python 2 , 30 bytes
Pruébalo en línea! El policía tiene
c/a
garrapatas para atrapar al ladrón, después de lo cual ha acelerado al policía. En el primer tic, el policía ganac-a
sobre el ladrón, mientras que en el último solo ganac%a
. Así, el total que el policía puede ganar es el producto del número de ticks y la distancia promedio por tick. Esto simplemente se compara con el plomo inicial que tiene el ladrón.fuente
TI BASIC (serie TI-83/84), 18 bytes
Otro puerto más es la influyente solución de Ruby del trabajo .
Ejecución
El orden de entrada es la velocidad del policía, la posición del ladrón, la aceleración del ladrón.
fuente
Retina , 79 bytes
Pruébalo en línea! Explicación:
Convierta la entrada a unario.
Haga espacio para la velocidad del ladrón.
Acelera al ladrón en cada pase.
Aleja al ladrón del policía.
Mueve al policía hacia el ladrón.
¿El policía ha atrapado al ladrón?
¿El ladrón supera al policía?
fuente
Recursiva ,
1916 bytesPruébalo en línea!
fuente