Ser golpeado en la rodilla con flechas parece ser la lesión de elección en este momento. Como tal, propongo el siguiente desafío de golf.
Tienes un aventurero que se ve así:
O
/|\
/ | \
|
|
/ \
/ \
Dado un archivo de texto que contiene un arco (dibujado como }
símbolo), un conjunto de paredes (dibujado como #
símbolos) y un aventurero, escriba el código más pequeño que calcule el ángulo y la velocidad inicial a la que debe disparar una flecha para golpear él en la rodilla.
Suponga lo siguiente:
- Cada caracter en el archivo es 0.5 x 0.5 metros.
- La flecha se dispara desde el centro del
}
, es decir, un desplazamiento de0.25m, 0.25m
- La gravedad es
10ms^-2
- La flecha pesa
0.1kg
- La flecha es un punto, es decir, las colisiones solo ocurren cuando la coordenada de la flecha entra en uno de los bloques.
- La velocidad inicial máxima es
50m/s
- El ángulo puede estar entre 0 (hacia arriba) y 180 (hacia abajo)
- Golpear cualquier parte de la pierna del aventurero se considera un golpe en la rodilla.
- Un muro (
#
personaje) ocupa un bloque completo de 0.5mx 0.5m. - La flecha puede viajar sobre la "parte superior" del archivo, pero no hay nada que impida que la entrada comience con un límite máximo de
#
caracteres. - No puedes penetrar paredes con flechas.
- ¡Golpear cualquier otra parte del aventurero no está permitido!
- Debería mostrar un error si es imposible golpearlo en la rodilla.
Entrada de ejemplo:
#
} O
# /|\
/ | \
# |
# |
/ \
/ \
No dude en hacer preguntas si necesita :)
code-golf
path-finding
Polinomio
fuente
fuente
#############
...Respuestas:
Python, 599 caracteres
La
X(K,L)
rutina toma una parábola queK=(a,b,c)
representa y = ax ^ 2 + bx + c y un segmento de línea queL=(a,b,c,d)
representa el segmento entre (a, b) y (c, d) . Ambos obstáculos (O
) y el objetivo (T
) se representan como segmentos de línea. Todas las distancias se escalan por un factor de 2.La entrada de ejemplo proporciona la siguiente trayectoria (por defecto, la velocidad mínima):
puede invertir
R
para obtener la ruta de velocidad máxima:fuente
8**5
obtener 64kB)w=v+1
y reemplazando las 3 instancias dev+1
conw
. Sin embargo, no codifico mucho Python, así que puedo estar equivocado.