Dado el arte ASCII de dos vectores, encuentre la magnitud y el grado del vector resultante.
Entrada
Esto puede recibirse a través de STDIN, leerse desde un archivo local o proporcionarse a través de una llamada de función. Aquí hay un ejemplo de una entrada de dos vectores:
^------>
|
|
|
x
Esto representa un cambio de 4 unidades al norte y 7 unidades al este. El punto de partida de cada entrada estará representado por unx
(decimal 120
).
Todos los vectores son líneas horizontales o verticales.
Cada vector tiene uno de estos cuatro puntos finales:
^v<>
y está formado por un guión (-
decimal 45) o una barra vertical (|
decimal 124).Los puntos vacíos en el plano están llenos de espacios (
decimal 32).
La entrada puede ser un solo
x
.Los vectores adyacentes son siempre perpendiculares entre sí.
Todos los vectores son de punta a cola.
Salida
Este será el desplazamiento del punto resultante (distancia desde el punto inicial) y el grado en que se ha movido, en relación con el punto inicial.
Para la entrada anterior, la salida debe ser 8.06
unidades y 60.3
grados. Cada uno debe tener exactamente 3 cifras significativas. Aquí hay algunos ejemplos de números con 3 dígitos significativos:
- 1.00
- 60,1
- 453
- 7.08
- 4.50
- 349
Todas las unidades de medida serán <= 999
.
Estos números deben salir en el siguiente formato. Esto está usando los números de arriba.
8.06 units @ 60.3 degrees
Esto puede ser seguido por un solo espacio final o nueva línea.
Si la entrada es única x
, sin desplazamiento y, por lo tanto, sin ángulo de desplazamiento, la salida debe ser una línea vacía (un solo carácter de nueva línea) o en el siguiente formato:
0 units @ - degrees
Si está tratando de calificar para el bono, la dirección también debería serlo -
.
En el caso de que se completen las bonificaciones 2, 3 o ambas, la salida debe seguir el modelo a continuación y cumplir con las mismas restricciones que las anteriores.
8.06 units @ 60.3 degrees NE
Los grados deben medirse de acuerdo con el plano estándar.
90
135 | 45
\|/
180 ---x---- 0
/|\
225 | 315
270
0
grados es este, 1 - 89
grados es noreste, 90
es norte, etc.
Bonos
Los siguientes valen un total de -50%.
Obtenga una bonificación de -10% por cada vector adicional que pueda manejarse. Este bono se puede aplicar hasta 3 veces. Los vectores nunca se superpondrán ni se cruzarán.
Obtenga una bonificación de -10% si su salida incluye la dirección cardinal del ángulo (norte, sur, este, oeste).
Obtenga una bonificación de -10% si su salida incluye las direcciones intermedias del ángulo (noreste, noroeste, sureste, suroeste).
Ejemplos
En:
x---->
|
v
Fuera:
5.39 units @ 338 degrees
Opcionalmente SE
En:
<--------------^
|
|
x
Fuera:
15.3 units @ 169 degrees
Opcionalmente NW
En:
x
|
|<-----^
| |
v------>
Fuera:
2.24 units @ 297 degrees
Opcionalmente SE
Ejemplos (vectores múltiples)
En:
x--->
|
|
v----------->
Fuera:
16.3 units @ 349 degrees
Opcionalmente SE
En:
<-------^
| |
| |
v |
|
|
x
Fuera:
8.54 units @ 159 degrees
Opcionalmente NW
En:
^-->
| |
| v
|
<--------x
Fuera:
6.32 units @ 162 degrees
Opcionalmente NW
x
? ¿Cuál es el límite entre el norte y el noroeste?x-->
. ¿Se pueden cruzar los vectores?x
. Puede haber más de dos (si intenta completar la bonificación), pero no menos. Estoy trabajando en ejemplos para múltiples entradas de vectores. En ninguna entrada se cruzarán los vectores. @ThomasKwaRespuestas:
JavaScript (ES6), 305 bytes - 50% de bonificación = 152.5 puntaje
Explicación
La entrada debe estar rellenada con espacios. Utiliza todos los bonos.
Prueba
Mostrar fragmento de código
fuente
Python 2, 238.5 (
594562482477-50%) bytesExplicación
Encuentra las posiciones de inicio y final mirando cada personaje en la entrada.
Inicio es
x
El final se encuentra mirando cada flecha (
<>^v
) y sus vecinos. Si los vecinos son vectores continuos, ignore. De lo contrario, este es el final.Mire a los vecinos perpendiculares a la dirección de la flecha.
Si contienen una línea perpendicular, entonces es un vector continuo.
Ejemplos (
_
indica espacio):Debido a que se encuentra el punto final, puede haber cualquier cantidad de vectores ( 30% de bonificación ).
fuente
\n
como saltos de línea ...input()
y el ajuste correspondiente de la entrada con "", ¡pero no parece haber una regla en contra!