Bob, o arqueiro
o
/( )\ This is Bob.
L L Bob wants to be an archer.
#############
.
/ \ <--- bow So he bought himself a
(c -)-> <--- arrow nice longbow and is about
( )/ <--- highly focused Bob shoot at a target.
L L
#############
___________________________________________________________________________________________
sky
Bob is a smart guy. He already knows what angle and
velocity his arrow has / will have. But only YOU know
the distance to the target, so Bob doesn't know if he
will hit or miss. This is where you have to help him.
. +-+
/ \ | |
(c -)-> | |
( )/ +++
L L |
###########################################################################################
Tarefa
Sua tarefa é renderizar uma imagem artística de ASCII de Bob atingindo ou errando o alvo. Para o cálculo:
- Seu programa receberá
arrow_x,angle,velocity,distance
como entrada separada por vírgula, em qualquer ordem que desejar. - Um caractere ASCII é igual
1m
. - O primeiro caractere na última linha possui as coordenadas
(0,0)
, portanto o chão (renderizado como#
) está emy=0
. - Bob sempre fica no chão, sua
y
posição não muda. - Não há max
y
. No entanto, o ápice das setas deve caber na imagem renderizada. - Toda entrada é fornecida como número inteiro decimal.
- Durante o cálculo, assuma que a seta é um ponto.
- A origem da flecha é a ponta da flecha
>
de um Bob em tiro (veja acima). Entãoarrow_x
, dado , você tem que calculararrow_y
. O pé esquerdo de Bob na saída deve corresponder àx
coord. do tiroteio Bob. distance
é ax
coordenada do pé do alvo . (ou seja, o meio do alvo).- Todas as medições são fornecidas em metros e graus, respectivamente.
- Atenção: O tiro Bob nunca é renderizado, apenas usado para cálculos! Veja abaixo os dois Bobs de saída válidos
- Atingir o alvo significa que o caminho das flechas cruza uma das duas paredes mais à esquerda (
|
) (ou seja, (distância 1,3) ou (distância 1,4)). Se em algum momento a seta estiver dentro desses 2m², o X em vez da parede que atinge. O alvo sempre tem a mesma altura e apenas sua posição x pode mudar.). Os acertos de canto ou uma flecha caindo do céu para o alvo não contam. - O terra padrão g é aplicado (9,81 m / s ^ 2).
distance+1
é o fim do campo; depois disso, tudo está errado e nenhuma flecha deve ser renderizada.- Se a flecha acertar o alvo de qualquer outra maneira (
distance-1
etc.), nenhuma flecha deve ser renderizada.
Senhorita
Este é um exemplo de como Bob está ausente (a seta entra no solo a 34m, o ângulo é 45 °, o tempo no ar é 10s, a velocidade é ~ 50 - mas existem muito mais entradas possíveis para causar essa saída. Apenas mostre que seu programa usa o fórmulas usuais para calcular resultados fisicamente "precisos".):
+-+
| |
c\ | |
/( ) v +++
L L | |
###########################################################################################
Bater
Este é um exemplo de renderização da pontuação de Bob (a seta entra no alvo (= cruza seu caminho)):
+-+
>--X |
\c/ | |
( ) +++
L L |
###########################################################################################
Exemplo
arrow_x
é 7.arrow_y
é sempre 3.angle
é30°
ou0.523598776
radianos.velocity
é13m/s
.distance
é 20.
Então, para atingir o alvo, a flecha precisa cruzar (19,3)
ou (19,4)
. Tudo o resto será uma falta. Nesse caso, a flecha entrará no chão (as médias y
serão <1.0
) 12.9358m = ~13m
depois 1.149s
.
Limites e pontuação
- Isso é código-golfe , então a solução mais curta vence. Não há bônus.
- O seu programa (como na função não ) deve aceitar entradas no formato descrito acima; entradas adicionais não são permitidas.
- Você não precisa lidar com entradas erradas / inúteis / impossíveis.
- Imprima na saída razoável mais curta para o seu idioma (std, arquivo, ...).
- Eu não ligo para rastrear espaços em branco.
- Dica: a largura da saída é
distance+2
. A altura éapex+1
.
The left foot of Bob in the output has to match the x coord. of the shooting Bob.
eSee below for the two valid output-Bobs
Respostas:
Ruby, 482
Ungolfed
Método
A equação principal aqui é:
Nota: imagem obtida em https://en.wikipedia.org/wiki/Trajectory_of_a_projectile
Onde,
O que estou fazendo é percorrer números de 0 a (distância -1) e em todas as iterações, verifique se a flecha atinge o chão (ou o alvo)
fonte