¡Oh, no, estoy perdido en el camino para encontrar los grandes tesoros de Marakov! Y todo lo que tengo son estas instrucciones inútiles que se parecen a S10R10D30
... ¡No tengo idea de lo que significan! ¿Me puedes ayudar?
Desafío
Dadas las instrucciones que consisten en N E S W U D L R 1 2 3 4 5 6 7 8 9 0
, indique qué tan lejos estaré de donde comencé cuando sigo esas direcciones (es decir, Distancia Euclidiana).
N E S W
referirse a mí girando hacia el norte, este, sur y oeste;
U D L R
refiérase a mí girando hacia arriba, hacia abajo, hacia la izquierda y hacia la derecha (Entonces NR
es lo mismo que E
, y así es SL
; SLL
es lo mismo que N
). Arriba significa seguir adelante; Abajo significa darse la vuelta.
Después de cada dirección de la letra habrá un número, que es qué tan lejos llegaré en esa dirección. N10E20
significa ir hacia el norte 10 unidades, luego girar hacia el este e ir hacia el este 20 unidades.
Detalles de entrada
- La entrada siempre comenzará con uno de
NESW
(por lo que no es necesario tener en cuenta la entrada en blanco). - Se permiten instrucciones de dos letras seguidas.
NE
debe interpretarse, "Gire al norte, luego gire inmediatamente al este". Es lo mismo que soloE
.SLL
es "Gire al sur, luego gire inmediatamente a la izquierda dos veces". Es lo mismo queN
. - Todos los números serán enteros (tenga en cuenta que
.
no está en el conjunto de caracteres) - La entrada solo consistirá en
NESWUDLR1234567890
(si necesita algo más, como '\ 0' en C; o si las funciones de entrada de su idioma tienen una nueva línea final, o algo así, está bien).
Salida
- La norma.
- Si utiliza una función, debe generar un tipo de datos numérico o una cadena.
- Debe tener una precisión de 3 decimales.
Casos de prueba
N10
:10
N10E10
:14.1421
N10S10
:0
NSEWUDLR10
:10
N100RR20E300D40L12
:268.7452
ERR10LL20UN30D100
:70.71067
El programa Python poco imaginativo que solía hacer.
Victorioso
Esto es codegolf, ¡así que los bytes más bajos después de una semana ganan!
NESWUDLR1234567890
?Respuestas:
(Ir) Ruby , 111 bytes
Pruébalo en línea!
Toma entrada en STDIN, la emite en STDOUT.
Básicamente, este enfoque utiliza números complejos para almacenar la posición actual, así como una pila (
c
), que contiene desplazamientos para cada dirección. Si hay una direcciónURDL
, la pila se gira por el índice de la dirección en esa cadena; si la dirección está enNESW
, se rota por el índice de la dirección en esa cadena, más el índice de1
en la pila. Esto transforma una rotación relativa a la posición actual en una rotación relativa a la posición de 1. En cualquier caso, la parte superior de la pila se multiplica por el número de pasos en la dirección y se agrega a la posición actual.fuente
Python 3 , 137 bytes
Pruébalo en línea!
-9 bytes gracias a Jonathan Allan
fuente
else:v+=d*n;n=0;h='NUERSDW'.find(i);d=d**(h%2)*1j**(~-h/2)
tenga en cuenta queL
se puede cortar aquí al final de la cadena de búsqueda porque-1%2
es igual7%2
y1j**(-1)
es igual1j**3
.for i in input()+'U':x="NUERSDW0123456789".find(i);c=x<7;v+=d*n*c;n=[n*10+x-7,0][c];d=[d,d**(x%2)*1j**(~-x/2)][c]
JavaScript (ES6),
148142140138137134 bytesMostrar fragmento de código
-2 bytes: usar en
.search()
lugar de.indexOf()
( @Shaggy )-1 byte: reorganizar el programa para eliminar los paréntesis adjuntos ( @Shaggy )
-3 bytes: uso en
.replace()
lugar de.match().map()
( @ThePirateBay )fuente
search
lugar deindexOf
?a
almap
, reemplazando el,
anteriorMath
con&&
y eliminando los paréntesis.Perl 5 , 149 + 1 (-p) = 150 bytes
Pruébalo en línea!
Explicado:
fuente