Pense em uma estrada como uma linha numérica, começando 0
e continuando indefinidamente:
.................................................................
Existem dois carros na estrada: C
e R
. C
é o policial que está tentando pegar R
, o ladrão. C
começa às 0
e R
começa em algum lugar na estrada:
C.............................R..................................
O policial já está se movendo - ele está perseguindo o ladrão. Ele tem uma velocidade constante. O ladrão entrou no carro. Ele está acelerando. A cada tick, a velocidade do ladrão aumenta com a aceleração.
Digamos que a velocidade do policial seja 7
e a aceleração do assaltante 1
. Se o ladrão começar 30
, é assim que a estrada se pareceria com cada marca:
C.............................R..................................
.......C.......................R.................................
..............C..................R...............................
.....................C..............R............................
............................C...........R........................
...................................C.........R...................
..........................................C........R.............
.................................................C........R......
Após o último tique acima, a velocidade do ladrão é igual à do policial, e ele ainda está à frente. Como o policial está se movendo a uma velocidade constante e o ladrão ainda está acelerando, o ladrão escapa, então você gera um valor verdadeiro. No entanto, se a velocidade do policial tivesse sido 9
...
C.............................R..................................
.........C.....................R.................................
..................C..............R...............................
...........................C........R............................
....................................C...R........................
.............................................X...................
... então o policial alcança o ladrão antes que ele possa fugir (marcado pelo X
), para que você produza um valor de falsey.
Sua tarefa
Dadas três entradas - a velocidade do policial, a posição do ladrão e a aceleração do ladrão - determinam se o ladrão escapará ou não.
Regras
- O policial sempre começa às
0
. - Todas as entradas serão inteiros positivos.
- O policial pega o ladrão se, após qualquer marca, a posição do policial for maior ou igual à posição do ladrão.
- O ladrão foge quando ainda não foi pego e sua velocidade é maior que a da polícia.
- Seu programa deve terminar após a saída.
- O ladrão acelera antes de mover cada marca.
Casos de teste
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
Faça referência à implementação do Python 3 que cria um visual também: Experimente online!
Isso é código-golfe , então a resposta mais curta em bytes vence.
fonte
robber acceleration, cop speed, robber position
)?Respostas:
Geléia , 9 bytes
Experimente online!
Resposta do Python 3 do porto de Freira Furada.
(programa completo) Leva os argumentos em ordem
acceleration, position, speed
.fonte
Python 3 , 29 bytes
Experimente online!
Explicação
A posição do policial no momento
t
ést
.A posição do ladrão no momento
t
éa(t)(t+1)/2 + p
.A distância assinada entre o policial e o ladrão é
(a/2)t^2 + (a/2-s)t + p
.Nunca chega a zero se o discriminante é negativo, sendo o discriminante
(a/2 - s)^2 - 4(a/2)(p) = [(a-2s)^2-8ap]/4
, que tem o mesmo sinal de(a-2s)^2-8ap
.fonte
(a/2)t^2 + (a/2-s)t + p = 0 -> 10t^2 - 50t + 61 = 0
? Por exemplo, para 60, 61, 20 o ladrão foge facilmente (as soluções da equação: 2.1 e 2.9 estão entre 2 e 3).Japonês , 13 bytes
Teste online!
Explicação
U
,V
, EW
são as entradas implícitas. Primeiro,Uo0W
criamos o intervalo [0, W, 2 * W, ...] até que ele atinjaU
.x
então resume isso, o que indica o quão longe o ladrão viaja antes de atingir a velocidade da polícia. Vamos chamar isso de r .Agora, até onde o policial viaja nesse período? Podemos calcular isso usando U * (U // W - 1) , que podem ser reorganizados para (U * L) // W - U . Vamos chamar isso de c .
Agora, para a etapa final: o ladrão foge? Tudo o que precisamos fazer aqui é verificar se c <r + V , ou reorganizado, c - V <r .
fonte
Cubicamente , 61 bytes
Experimente online! Para que isso funcione no TIO, você pode precisar de substituir
&
com&1
devido a um bug no interpretador.Este é um porto vergonhoso da resposta de Leaky Nun . A entrada está no formato
a s p
, ondea
está a aceleração do ladrão,s
a velocidade do policial ep
a posição do ladrão.Se a aceleração for muito alta, isso falhará. Não sei até que ponto a aceleração suporta esse programa, mas sei que não é maior que 1260 . O fator limitante é que ele armazena a aceleração no cubo e verifica se o cubo foi resolvido verificando apenas se a soma da face superior é 0 (uma verificação incompleta). Parece funcionar para a aceleração = 50, mas não testei para ver quão alto ele pode chegar.
Como funciona
fonte
6
in%6
e*6
pode ser removido, pois agora eles podem ser chamados implicitamente.Pitão , 11 bytes
Isso os leva nesta ordem:
Robber Acceleration, Cop Speed, Robber Position
separados por uma nova linha (como mostrado na suíte de testes).Test Suite ou Experimente online!
fonte
Pyke , 14 bytes
Porto da resposta Python de totallyhuman . Retorna
1
para verdade e0
para falsidade.Experimente aqui!
Explicação
Pyke , 15 bytes
Minha primeira resposta Pyke! Porta da minha solução Pyth , inspirada em na submissão do Leaky's Python . Retorna
1
para verdade e0
para falsidade.Experimente aqui!
Explicação
fonte
Python 2 , 62 bytes
Experimente online!
fonte
Ruby ,
292725 bytesExperimente online!
Chegou de 29 a 27 roubando a idéia de multiplicar os dois lados por 4. (resposta em python de Leaky Nun)
Obteve de 27 a 25 removendo parênteses em torno dos parâmetros lambda (obrigado totalmente humano)
fonte
hit
parah
ou similar. Você também pode salvar alguns bytes alterando de um método para um proc, assim:->c,p,a{(c-a*0.5)**2<2*p*a}
collision
no seu link TIO pelo nome do método correto.c,p,a
.C # (.NET Core) , 33 bytes
Experimente online!
Eu sinto que isso está errado em algum lugar, mas é aprovado em todos os casos de teste, portanto, é possível que simplesmente não haja casos de teste em que o policial supere o ladrão por um único tique, ou talvez funcione apesar das minhas reservas.
fonte
Python 2 ,
313029 bytes-1 byte graças ao Sr. Xcoder.
Começou como uma porta da resposta Ruby .
Experimente online!
fonte
.5
em vez de0.5
> _>a/2
usa divisão inteira, isso poderia dar errado?Swift 3 , 55 bytes
Observe que eu declarei a variável
t
porque a expressão seria muito complexa para ser resolvida em um tempo razoável, caso contrário (falha de Swift!).Suíte de teste.
ou 55 bytes , fechamento exato equivalente (preciso da última parte porque é uma construção complexa):
Suíte de teste.
Swift 3 , 57 bytes
Suíte de teste.
fonte
Python 2 , 30 bytes
Experimente online! O policial tem
c/a
carrapatos para pegar o ladrão, após o que acelerou o policial. No primeiro tick, o policial ganhac-a
no ladrão, enquanto no último tick ele só ganhac%a
. Assim, o total que o policial pode ganhar é o produto do número de ticks e da distância média por tick. Isso é simplesmente comparado à liderança inicial do ladrão.fonte
TI BASIC (série TI-83/84), 18 bytes
No entanto, outro porto de itdoesntwork é influente solução rubi .
Execução
A ordem de entrada é velocidade da bobina, posição do ladrão, aceleração do ladrão.
fonte
Retina , 79 bytes
Experimente online! Explicação:
Converter entrada para unário.
Abra espaço para a velocidade do ladrão.
Acelere o ladrão em cada passagem.
Afaste o ladrão do policial.
Mova o policial em direção ao ladrão.
O policial pegou o ladrão?
O ladrão supera a velocidade do policial?
fonte
Recursiva ,
1916 bytesExperimente online!
fonte