Pensé que este sería un buen desafío: http://adventofcode.com/2016/day/1
Descripción de la tarea
Dada una secuencia de rotaciones y distancias que siguen el patrón (L | R) [1-9] [0-9] *, proporcione la distancia de Manhattan entre los puntos inicial y final, que es el número mínimo de movimientos verticales y horizontales en una cuadrícula
Ejemplos
Por ejemplo, si suponemos que comenzó a mirar hacia el norte:
Después de R2, L3 te deja 2 cuadras al este y 3 cuadras al norte, o 5 cuadras de distancia. R2, R2, R2 te deja a 2 cuadras al sur de tu posición inicial, que está a 2 cuadras de distancia. R5, L5, R5, R3 te deja a 12 cuadras de distancia.
Detalles técnicos
Puede elegir el separador entre los movimientos (por ejemplo: "\ n", "," o ","). Debe dar la respuesta como un entero en la base 10.
No es un duplicado!
No es un duplicado por múltiples razones:
- Los movimientos no son lo mismo. Aquí hay rotaciones , no direcciones.
- Quiero la distancia de Manhattan, no la euclidiana.
Respuestas:
Python 3,
10999104101 bytesEsta es una respuesta simple que usa números complejos, con entrada como una cadena separada por espacios o una cadena separada por una nueva línea. Sugerencias de golf bienvenidas!
Editar: -13 bytes gracias a Labo. +5 bytes para convertir a un int.
Ungolfing
fuente
PHP, 93 bytes
Descompostura
fuente
Python 2, 86 bytes
Rastrea la corriente
x
y lasy
coordenadas. Al girar, en lugar de actualizar la dirección, gira el valor actual para que el movimiento siempre esté en la dirección x positiva. Los números complejos eran demasiado costosos para extraer las coordenadas.fuente
Python 2,
103102bytesrepl.it
La entrada es una cadena de direcciones delimitadas por espacios, por ejemplo
"R5 L5 R5 R3"
.Imprime la distancia de Manhattan entre la ubicación inicial y el destino.
¿Cómo?
Comienza en el origen del plano complejo
l=0
;Con un contador de giro de cuarto a la derecha acumulativo
c=0
;Para cada instrucción,
i
la rotación se analiza comparando el primer carácter de la dirección con el carácter'N'
, yc
se ajusta en consecuencia.La distancia a recorrer se analiza
int(i[1:])
y la instrucción se promulga dando tantos pasos del tamaño de un bloque en la dirección dada tomando lac
potencia de0+1j
con1j**c
.La distancia final de Manhattan es la suma de las distancias absolutas desde el origen en las dos direcciones: imaginaria y real; logrado con
abs(l.imag)+abs(l.real)
fuente
cmp
como mi respuesta, avíseme y lo eliminaré.JavaScript (ES2016), 98
1002 bytes guardados gracias a @Neil
100 bytes para ES6
Menos golf
Prueba (ES6)
fuente
s=>s.replace(/.(\d+)/g,(c,n)=>(d+=c<'R'||3,n*=~-(d&2),d&1?x+=n:y+=n),x=y=d=0)&&(x<0?-x:x)+(y<0?-y:y)
que ahora es dos bytes más corto que su respuesta ES6, gracias a los trucosc<'R'||3
yn*=~-(d&2)
.