Considérez une route comme une droite numérique, commençant 0
et se poursuivant indéfiniment:
.................................................................
Il y a deux voitures sur la route: C
et R
. C
est le flic qui essaie d'attraper R
, le voleur. C
commence à 0
, et R
commence quelque part sur la route:
C.............................R..................................
Le flic est déjà en mouvement - il poursuit le voleur. Il a une vitesse constante. Le voleur a sauté dans sa voiture. Il accélère. A chaque tick, la vitesse du voleur augmente par son accélération.
Disons que la vitesse du flic est 7
et l'accélération du voleur est 1
. Si le voleur commence 30
, voici à quoi ressemblerait la route à chaque tick:
C.............................R..................................
.......C.......................R.................................
..............C..................R...............................
.....................C..............R............................
............................C...........R........................
...................................C.........R...................
..........................................C........R.............
.................................................C........R......
Après le dernier tick ci-dessus, la vitesse du voleur est égale à celle du flic, et il est toujours devant. Étant donné que le flic se déplace à une vitesse constante et que le voleur accélère toujours, le voleur s'échappe, vous produisez donc une valeur vraie. Cependant, si la vitesse du flic avait été 9
...
C.............................R..................................
.........C.....................R.................................
..................C..............R...............................
...........................C........R............................
....................................C...R........................
.............................................X...................
... alors le flic rattrape le voleur avant que le voleur ne puisse s'enfuir (marqué par le X
), vous produisez donc une valeur de falsey.
Ta tâche
Étant donné trois entrées - la vitesse du flic, la position du voleur et l'accélération du voleur - déterminez si le voleur s'en sortira ou non.
Règles
- Le flic commence toujours à
0
. - Toutes les entrées seront des entiers positifs.
- Le flic attrape le voleur si, après un tick, la position du flic est supérieure ou égale à la position du voleur.
- Le voleur s'enfuit quand il n'a pas encore été attrapé et sa vitesse est supérieure à celle du flic.
- Votre programme doit se terminer après la sortie.
- Le voleur accélère avant de déplacer chaque tick.
Cas de test
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
Référence à l'implémentation de Python 3 qui crée également un visuel: Essayez-le en ligne!
C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
la source
robber acceleration, cop speed, robber position
place)?Réponses:
Gelée , 9 octets
Essayez-le en ligne!
Réponse de Port of Leaky Nun's Python 3.
(programme complet) Prend les arguments dans l'ordre
acceleration, position, speed
.la source
Python 3 , 29 octets
Essayez-le en ligne!
Explication
La position du flic au moment
t
estst
.La position du voleur à l'époque
t
esta(t)(t+1)/2 + p
.La distance signée entre le flic et le voleur est
(a/2)t^2 + (a/2-s)t + p
.Il n'atteint jamais zéro si le discriminant est négatif, l'être discriminant
(a/2 - s)^2 - 4(a/2)(p) = [(a-2s)^2-8ap]/4
, qui a le même signe que(a-2s)^2-8ap
.la source
(a/2)t^2 + (a/2-s)t + p = 0 -> 10t^2 - 50t + 61 = 0
? Par exemple, pour 60, 61, 20, le voleur s'échappe facilement (les solutions d'équation: 2.1 et 2.9 étant toutes deux entre 2 et 3).Japt , 13 octets
Testez-le en ligne!
Explication
U
,V
EtW
sont les entrées implicites. Tout d'abord, avecUo0W
nous créons la plage [0, W, 2 * W, ...] jusqu'à ce qu'elle atteigneU
.x
puis résume cela, ce qui donne à quelle distance le voleur se déplace avant d'atteindre la vitesse de flic. Nous appellerons cela r .Maintenant, jusqu'où le flic voyage-t-il en ce moment? Nous pouvons calculer cela en utilisant U * (U // W - 1) , qui peut être réarrangé (U * U) // W - U . Nous appellerons cela c .
Maintenant pour la dernière étape: le voleur s'enfuit-il? Tout ce que nous devons faire ici est de vérifier si c <r + V , ou réarrangé, c - V <r .
la source
Cubiquement , 61 octets
Essayez-le en ligne! Pour que cela fonctionne dans TIO, vous devrez peut-être le remplacer
&
par en&1
raison d'un bogue dans l'interpréteur.C'est un port sans vergogne de la réponse de Leaky Nun . L'entrée est sous la forme
a s p
, oùa
est l'accélération du voleur,s
la vitesse du flic etp
la position du voleur.Si l'accélération est trop élevée, cela échouera. Je ne sais pas à quel niveau d'accélération ce programme prendra en charge, mais je sais qu'il n'est pas supérieur à 1260 . Le facteur limitant est qu'il stocke l'accélération dans le cube et vérifie si le cube est résolu en vérifiant uniquement si la somme de la face supérieure est 0 (une vérification incomplète). Il semble fonctionner pour une accélération = 50, mais je n'ai pas testé pour voir à quelle hauteur il peut atteindre.
Comment ça fonctionne
la source
6
in%6
et*6
peuvent être supprimées car elles peuvent désormais être appelées implicitement.Pyth , 11 octets
Cela les prend dans cet ordre:
Robber Acceleration, Cop Speed, Robber Position
séparés par une nouvelle ligne (comme indiqué dans la suite de tests).Testez la suite ou essayez-la en ligne!
la source
Pyke , 14 octets
Port de réponse Python de totalement humain . Retourne
1
pour véridique et0
pour la fausseté.Essayez-le ici!
Explication
Pyke , 15 octets
Ma toute première réponse Pyke! Port de ma solution Pyth , qui s'inspire de la soumission de Leaky's Python . Retourne
1
pour la vérité et0
pour la fausseté.Essayez-le ici!
Explication
la source
Python 2 , 62 octets
Essayez-le en ligne!
la source
Rubis ,
292725 octetsEssayez-le en ligne!
Je suis passé de 29 à 27 en volant l'idée de multiplier les deux côtés par 4. (Réponse de Leaky Nun en python)
Passé de 27 à 25 en supprimant les parens autour des paramètres lambda (merci totalement humain)
la source
hit
àh
ou similaire. Vous pouvez également être en mesure d'économiser certains octets en passant d'une méthode à un proc, comme ceci:->c,p,a{(c-a*0.5)**2<2*p*a}
collision
dans votre lien TIO par le nom de méthode correct.c,p,a
.C # (.NET Core) , 33 octets
Essayez-le en ligne!
J'ai l'impression que c'est quelque part, mais cela passe pour tous les cas de test, il est donc possible qu'il n'y ait tout simplement pas de cas de test où le flic dépasse le voleur pour une seule tique, ou cela pourrait simplement fonctionner malgré mes réserves.
la source
Python 2 ,
313029 octets-1 octet merci à M. Xcoder.
Commencé comme port de la réponse Ruby .
Essayez-le en ligne!
la source
.5
au lieu de0.5
> _>a/2
utilise la division entière, cela pourrait-il mal tourner?Swift 3 , 55 octets
Notez que j'ai déclaré la variable
t
car l'expression serait trop complexe pour être résolue dans un délai raisonnable sinon (faute de Swift!).Suite de tests.
ou 55 octets , équivalent de fermeture exact (j'ai besoin de la dernière partie car c'est une construction complexe):
Suite de tests.
Swift 3 , 57 octets
Suite de tests.
la source
Python 2 , 30 octets
Essayez-le en ligne! Le flic a des
c/a
tiques pour attraper le voleur, après quoi il a accéléré le flic. Au premier tick, le flic gagnec-a
sur le voleur tandis qu'au dernier tick, il ne gagne quec%a
. Ainsi, le total que le flic peut gagner est le produit du nombre de tiques et de la distance moyenne par tick. Ceci est simplement comparé à l'avance initiale du voleur.la source
TI BASIC (série TI-83/84), 18 octets
Encore un autre port de la solution Ruby influente de itdoesntwork .
Exécution
L'ordre d'entrée est la vitesse du flic, la position du voleur, l'accélération du voleur.
la source
Rétine , 79 octets
Essayez-le en ligne! Explication:
Convertissez l'entrée en unaire.
Faites de la place pour la vitesse du voleur.
Accélérez le voleur à chaque passage.
Éloignez le voleur du flic.
Déplacez le flic vers le voleur.
Le flic a attrapé le voleur?
Le voleur dépasse-t-il le flic?
la source
Recursiva ,
1916 octetsEssayez-le en ligne!
la source