Aquí hay otro simple:
El reto
Dados dos puntos en un espacio n-dimensional, genera la distancia entre ellos, también llamada distancia euclidiana.
- Las coordenadas serán números racionales; Los únicos límites son las restricciones de su idioma.
- La dimensión más baja es 1, la más alta es lo que su idioma pueda manejar
- Puede suponer que los dos puntos son de la misma dimensión y que no habrá una entrada vacía.
- La distancia debe ser correcta al menos con 3 decimales. Si su idioma no admite números de coma flotante, envíe el número entero más cercano.
Reglas
- Como de costumbre, se permite la función o el programa completo.
- La entrada puede tomarse de STDIN, línea de comando o argumentos de función.
- El formato de entrada depende de usted, especifique cuál utilizó en su respuesta.
- La salida puede proporcionarse imprimiendo en stdout o valor de retorno.
- Este es el código de golf, ¡ así que el conteo de bytes más bajo gana! En caso de empate, gana la respuesta anterior.
Casos de prueba
Cada punto está representado por una lista de longitud n.
[1], [3] -> 2
[1,1], [1,1] -> 0
[1,2], [3,4] -> 2.82842712475
[1,2,3,4], [5,6,7,8] -> 8
[1.5,2,-5], [-3.45,-13,145] -> 150.829382085
[13.37,2,6,-7], [1.2,3.4,-5.6,7.89] -> 22.5020221314
¡Feliz codificación!
code-golf
number
arithmetic
geometry
Denker
fuente
fuente
Respuestas:
MATL , 2 bytes
Pruébalo en línea !
La
ZP
función (correspondiente a MATLABpdist2
) calcula todas las distancias por pares entre dos conjuntos de puntos, utilizando la distancia euclidiana por defecto. Cada conjunto de puntos es una matriz, y cada punto es una fila. En este caso, produce un único resultado, que es la distancia entre los dos puntos.fuente
MATL,
3 bytes4.0Gracias por -1 por @AndrasDeak!
Lee dos vectores (a través de una entrada implícita solicitada por
-
) luego los resta y calcula la norma de su diferencia conZn
.Pruébalo en línea!
fuente
Pyth, 2 bytes
Literalmente una función que hace este problema
Pruébalo aquí
fuente
Jalea , 4 bytes
Pruébalo en línea!
Cómo funciona
fuente
Mathematica, 11 bytes
Entrada como dos listas, salida como un número. Si la entrada es exacta (enteros, racionales, etc.), la salida también será exacta. Si la entrada contiene un número de punto flotante, la salida también será flotante.
fuente
EuclideanDistance
funcionaría muy bien también ... ¡si el nombre no fuera tan largo! Si solo hubiera "MATL para Mathematica", este sería un solo byte =)Octava, 15 bytes
Ejemplo:
fuente
CJam,
118 bytesGracias a Dennis por guardar 3 bytes.
Ejecute todos los casos de prueba.
Explicación
Vea este consejo para saber por qué
:mh
funciona.fuente
:mh
es muy agradable de hechoHaskell, 46 bytes
Haskell, 35 bytes (por @nimi)
Haskell, 31 bytes
<hack>
</hack>
Ejemplos:
fuente
map
+uncurry
+zip
Rara vez vale la pena, usozipWith
:d a=sqrt.sum.zipWith(((^2).).(-))a
.(.)
siempre devuelve una función que solo toma un argumento ... Creo que puedes hacer algo como (.). (.), Pero eso realmente no vale la pena.APL,
1411 bytesEste es un tren de función diádica que toma los vectores a la izquierda y a la derecha y devuelve la norma euclidiana de su diferencia.
Explicación:
Pruébalo aquí
¡Guardado 3 bytes gracias a Dennis!
fuente
.5*⍨(+/-×-)
Guarda algunos bytes.J, 9 bytes
Esta es una función que toma un conjunto de coordenadas del otro (
-/>
), y luego realiza una suma+
debajo del&.
cuadrado*:
.La entrada debe estar en el formato
x y z;a b c
dondex y z
está su primer conjunto de coordenadas ya b c
es el otro.fuente
>
y especificar que la entrada se debe dar comox y z,:a b c
.Java,
130117114107105 bytesEsta es la solución obvia. No suelo jugar al golf en Java, pero tenía curiosidad por ver si Java podría vencer a la versión Brainfuck. Parece que no hice un buen trabajo entonces ... Tal vez uno podría usar el nuevo Mapa / Reducir de Java 8 para guardar algunos bytes.
¡Gracias a @flawr (13 bytes), @KevinCruijssen (9 bytes) y @DarrelHoffman (3 bytes)!
Golfizado:
Sin golf:
fuente
for
bucle se comprime adouble x=0,s;for(int i=0;++i<a.length;s=a[i]-b[i],x+=s*s);
double[]a,b->{double x=0,s;for(int i=0;++i<a.length;s=a[i]-b[i],x+=s*s);return Math.sqrt(x);}
para un total de 93 bytes.public
frente del método para guardar 7 bytes, y también puede colocar elx+=s*s
exterior del ciclo for para que no necesite la coma (es decirfor(int i=-1;++i<a.length;s=a[i]-b[i])x+=s*s;
) para -1 byte.for(int i=0;i<a.length;x+=s*s)s=a[i]-b[i++];
(y también he cambiado la-1
a0
de un byte adicional)0
usando las reglas de precedencia del operador! Gracias por salvarme una gran cantidad de bytes.Julia, 16 bytes
Esta es una función que acepta dos matrices y devuelve la norma euclidiana de su diferencia como flotante.
Puede verificar todos los casos de prueba a la vez en línea aquí .
fuente
golflua , 43 caracteres
Funciona llamándolo como
Un equivalente de Lua sería
fuente
En serio, 12 bytes
Pruébalo en línea!
Explicación:
fuente
Ruby, 52
En programa de prueba
fuente
AppleScript,
241239 bytesEste es un código de golf, pero he puesto comentarios en el formulario
--
.Esto usa el mismo algoritmo que la mayoría de los otros programas aquí.
fuente
Perl 6,
30292624 bytes(Gracias @ b2gills por 2 bytes más perdidos)
uso
fuente
{sqrt [+] ([Z-] $_)»²}
JavaScript
ES7, 45ES6, 37 bytesEspera una matriz de pares de coordenadas, una de cada vector, por ejemplo
[[1, 5], [2, 6], [3, 7], [4, 8]]
. Si eso es inaceptable, entonces para 42 bytes:Espera dos matrices de igual longitud correspondientes a los dos vectores N-dimensionales, por ejemplo
[1, 2, 3, 4], [5, 6, 7, 8]
. Editar: Guardado 3 bytes gracias a @ l4m2. (Además, ¿nadie notó mi error tipográfico?)fuente
a=>b=>Math.hypot(...a.map((t,i)=>t-b[i]))
Python 2, 47 bytes
Una solución directa. La función espera 2 puntos como secuencias de números y devuelve la distancia entre ellos.
Ejemplo:
fuente
𝔼𝕊𝕄𝕚𝕟, 6 caracteres / 13 bytes
Try it here (Firefox only).
Calcula la norma de diferencia de las matrices de entrada.
fuente
Scala,
6762 bytesRequiere entrada como una
secuencia / vector detuplas var-argEjemplo:
fuente
C #, 72 bytes
Una solución simple usando Linq.
fuente
Sabio, 35 bytes
Esta función toma 2 listas como entrada y devuelve una expresión simbólica. La distancia se calcula realizando la resta del vector en las listas y calculando la norma euclidiana del vector resultante.
Pruébalo en línea
fuente
TI-Basic (TI-84 Plus CE), 15 bytes
TI-Basic es un lenguaje tokenizado .
Solicita la entrada como dos listas y devuelve la distancia euclidiana entre ellos en
Ans
Explicación:
fuente
R, 4 bytes
Esta es una función incorporada para calcular la matriz de distancia de cualquier matriz de entrada. El valor predeterminado es la distancia euclidiana.
Ejemplo de uso:
Si te sientes decepcionado porque es una versión incorporada, aquí hay una versión no incorporada (o al menos, menos incorporada ...) para 22 bytes (gracias a Giuseppe ):
Esta es una función anónima que toma dos vectores como entrada.
fuente
function(x,y)norm(x-y,"F")
es más corto que tu segunda versión.Haskell, 32 bytes
fuente
map
y paréntesis).sqrt$sum$(^2)<$>zipWith(-)
no es una función anónima válida. La regla subyacente es bastante simple: si puede escribirf = <mycode>
yf
luego realiza la tarea requerida, entonces<mycode>
es una función anónima válida. En su caso, debe agregarf p q = <mycode> p q
, por lo que<mycode>
por sí solo no es válido.Python 3, 70 caracteres
Recorre, encuentra el cuadrado de la diferencia y luego la raíz de la suma:
fuente
sum([(x-y)**2 for x,y in zip(a,b)])**.5
Mathcad, bytes
Utiliza el operador de magnitud de vector incorporado (valor absoluto) para calcular el tamaño de la diferencia entre los dos puntos (expresado como vectores).
El tamaño del campo de golf de Mathcad está en espera hasta que llegue (o alguien más lo haga) para abrir la discusión sobre meta. Sin embargo, la forma más corta (suponiendo que la entrada de los vectores de puntos no contribuya a la puntuación) es de 3 "bytes", con 14 bytes para la versión funcional.
fuente
Pyke, 7 bytes
Pruébalo aquí!
Transponer, aplicar restar, cuadrado del mapa, suma, sqrt.
fuente
Ruby, 50 bytes.
Zip, luego mapa / reducir. Apenas supera la otra respuesta de Ruby de @LevelRiverSt en 2 bytes ...
Pruébalo en línea
fuente