La historia innecesaria y enrevesada
Estoy caminando por Manhattan, bloque por bloque y mis pies se han cansado y quiero volver a casa.
El tráfico es bastante malo, pero afortunadamente soy muy rico y tengo un helicóptero en espera en el hotel. Pero necesito que sepan cuánto combustible empacar para el vuelo y para eso necesitan saber mi distancia directa desde el hotel. Recordé qué bloques caminé y puedo decirles qué ruta tomé. Sin embargo, esta distancia debe ser precisa; si son demasiado cortos, no volveremos demasiado, y compré combustible que no puedo usar.
¿Puedes escribirme un programa para convertir eso en la distancia que tendrán que recorrer en su vuelo para traerme?
Especificación:
Escríbeme una función que:
- Acepta una lista o cadena de bloques recorridos en relación con una cuadrícula arbitraria:
- U p, D propia, izquierda y derecha .
- Puede ser mayúscula o minúscula, por ejemplo. si es más corto de usar en
u
lugar deU
seguir adelante. - Una dirección no válida tiene un comportamiento indefinido, por ejemplo. una dirección de X puede causar una falla.
- Devuelve un flotante / decimal / doble que es el doble de la distancia en línea recta desde el punto de origen.
Para ilustración y aclaración:
Mi viaje podría haberse registrado tan fácilmente como "luluu..."
o ['l','u','l'...]
pero debe registrarse como Arriba, Abajo, Izquierda, Derecha.
Respuestas:
J, 17 caracteres
Utiliza el hecho de que los poderes de
j
representan las direcciones correctas.'urdl'i.
tomar una cadena y calcular índices (0 para 'u', 1 para 'r', ...)0j1^
se transforma en la dirección en el plano complejo utilizando la potencia correspondiente dej
.+/
resume los pasos individuales2*|
dos veces el móduloEjemplo:
fuente
Python 2.7
5658565148Con el Number One Dime robado de Scrooge McDuck , hice mi fortuna y ahora tengo más riqueza que Scrooge.
Python 2.7 -
615350 (sin distinción entre mayúsculas y minúsculas)Implementación
fuente
IndexError: list index out of range
. ¿Qué forma debe tener la entrada?%5
así%8
. Ok, ahora tiene más sentido :)APL (29)
p.ej
Explicación:
+/'URDL'∘.=⍵
: ver con qué frecuenciaURDL
aparecen los caracteres en el argumento-⌿2 2⍴
: resta elU
valor delD
valor y elR
valor delL
valor2 0j2×
: multiplica el valor vertical por2
y el valor horizontal por2i
+/
: suma|
: magnitudfuente
Rubí 1.9+ (67)
Ejemplo
fuente
perl6: 44 caracteres
get.comb
obtiene una línea de entrada y se divide en caracteres<U R L D>
es una lista de palabras, caracteres en este caso(1,2,3) Z (4,5,6)
==(1,2), (2,5), (3,6)
, por lo que comprime 2 listas entre sí, haciendo una lista de parcelas que se%()
convierte en un hash<<**>>
hace pares**
, extendiendo la lista más corta para ajustarse a la más larga. La lista más corta pasa a ser soloi
[+]
suma todos los elementos de una lista,abs
toma el módulo para números complejosSí, eliminé todos los espacios posibles.
fuente
Python 2.7 - 65
Agradable y corto, esto usa números complejos para atravesar el avión:
Apoyos para DSM y Abhijit en otras preguntas que me mostraron el uso de
1j
calcular esto.fuente
1j
puede escribir comoj
,-1j
como-j
? Además, ¿esto maneja la entrada superior e inferior, o solo la superior?j
y la unidad imaginariaj
2
lugar de multiplicar el resultado final.Mathematica
9249Calle merece todo el crédito por racionalizar el código.
Ejemplo
fuente
f@l_ := 2 N@Norm[Tr[l /. {"r" -> 1, "l" -> -1, "u" -> I, "d" -> -I}]]
será suficiente.2 Norm[(2. + 2. I) + "U" + "X"]
como la salida de su código.@
s, obtendrá otros dos caracteres menos.PHP, 67
Ejemplo:
fuente
Julia, 45
Robó el
i
truco de poderes. Además, todos los caracteres excepto d tienen valores que funcionan como potencias aceptables parai
.fuente
J, 29 caracteres
Sólo funciona con direcciones minúsculas y caracteres que no sean
r
,u
,l
, yd
hará que se dará una respuesta equivocada.Uso:
Explicación:
'ruld'i.'uuuudrrrl'
La forma diádica dei.
encuentra el índice de elementos del argumento derecho en el argumento izquierdo. En este caso:/:~
ordena esta lista en orden ascendente:#/.~
cuenta el número de ocurrencias de cada número:_2[\
lo corta en 2 filas:-/
resta la parte inferior de la parte superior+&.*:
Toma prestado un truco de otra respuesta J que vi esta mañana , y cuadra los elementos, luego los suma, luego realiza una raíz cuadrada. Ver debajo de la&.
documentación:+:
duplica el resultado:fuente
R,
867456 caracteresOk, en realidad es mucho más corto con números imaginarios:
Uso:
Antigua solución a 74 caracteres con coordenadas xy:
Uso:
Toma la entrada como stdin, debe estar en minúsculas y separadas por espacios. Utilice las coordenadas xy a partir de (0,0).
fuente
k (
5049)Ejemplo
fuente
Java, 185,
203,204,217,226Supuse que cada "U" era "1 arriba", por lo que dos unidades arriba serían "UU"
Editar: interruptor intercambiado por ifs
Movido por iterador
Ya no toma la entrada como una cadena, sino un conjunto de direcciones
fuente
T-SQL, 158
@S es la cadena de entrada del tipo varchar (max)
fuente
ES6,
7769Definición:
Uso:
(Inspirado parcialmente por la respuesta de Boann).
fuente
for
declaración con algo expresión (un cuerpo de función de flecha que contiene declaraciones requiere los corchetes y el retorno explícito, los cuerpos que son solo expresiones no).JavaScript - 142 caracteres - sin eval ()
donde a es una cadena como 'uudrrl'
usar así
Prueba en la consola del navegador.
fuente
C # - 90 caracteres
Recién salido de LINQPad.
Donde input es una cadena válida.
fuente
Befunge-93 (65)
Tiene 65 caracteres que no son espacios en blanco (217 con espacios en blanco, aunque eso se puede reducir con un diseño más compacto (para 69/176 caracteres)). Toma un poco de liberalidad con el formato de salida, pero es indudablemente preciso. No parece que valga la pena el esfuerzo de implementar / robar una implementación de raíz cuadrada.
echo 'UUDLLUU' | ./befungee.py ../man
salidas 2√13 (en realidad, la implementación parece tener problemas con el ASCII extendido).fuente
Matlab, 51 caracteres
Mi presentación de Matlab, funciona solo con letras cautivas. ¡Esto fue divertido! La parte más difícil fue convertir la cadena en una matriz de números complejos para sumar.
Función:
Uso:
fuente
Javascript, 136
fuente
JavaScript, 89
Ejemplo:
fuente
C, 120
d("LULUURRRRURD")
->8.485281
fuente
JavaScript (sin ES6, sin evaluación) - 131
Prueba:
fuente