Introducción
Imagina que estás en un plano cartesiano bidimensional y quieres determinar tu posición en él. Sabes 3 puntos en ese avión y tu distancia a cada uno de ellos. Si bien siempre es posible calcular su posición a partir de eso, hacerlo en su cabeza es bastante difícil. Entonces decides escribir un programa para eso.
El reto
Dados 3 puntos y su distancia a ellos, envíe los cordinates de su posición.
- La entrada y la salida pueden estar en cualquier formato conveniente, incluido el uso de números complejos en lugar de números reales. Por favor, aclare en su respuesta qué formato utiliza.
- Siempre obtendrá exactamente 3 puntos distintos con su distancia a usted.
- Las coordenadas y distancias serán flotantes con precisión arbitraria. Su salida tiene que ser correcta a 3 decimales. El redondeo depende de usted. Por favor aclare en su respuesta.
- Puede suponer que los tres puntos no son colineales, por lo que siempre habrá una solución única.
- No está permitido aplicar fuerza bruta a la solución.
- No puede usar ningún componente incorporado que trivialice este problema en particular. Sin embargo, se permiten las construcciones para normas vectoriales, etc.
Sugerencia para comenzar:
Piensa en un círculo alrededor de cada uno de esos 3 puntos con su distancia a ti como radio.
Reglas
- Función o programa completo permitido.
- Reglas predeterminadas para entrada / salida.
- Se aplican lagunas estándar .
- Este es el código de golf , por lo que gana el conteo de bytes más bajo. Tiebreaker es una presentación anterior.
Casos de prueba
El formato de entrada para un punto aquí es [[x,y],d]
con x
y y
siendo las coordenadas y d
la distancia a este punto. Los 3 de esos puntos están ordenados en una lista. La salida será x
y luego y
en una lista.
[[[1, 2], 1.414], [[1, 1], 2.236], [[2, 2], 1.0]] -> [2, 3] [[[24.234, -13.902], 31.46], [[12.3242, 234.12], 229.953], [[23.983, 0.321], 25.572]] -> [-1.234, 4.567] [[[973.23, -123.221], 1398.016], [[-12.123, -98.001], 990.537], [[-176.92, 0], 912.087]] -> [12.345, 892.234]
Puede generar casos de prueba adicionales con este programa Pyth . La ubicación va en la primera línea de la entrada y los 3 puntos están en las siguientes 3 líneas.
¡Feliz codificación!
solve
(dado tres ecuaciones circulares) trivializar el problema? Pensé que era, pero si estás de acuerdo con esas cosas, seguiré y lo publicaré.Respuestas:
Desmos, 122 bytes
Uso en línea . Copie + pegue cada ecuación en un cuadro de ecuaciones, haga clic en "agregar todo" para cada cuadro, luego haga clic en el punto de intersección, luego ingrese cada valor según corresponda. cada uno de
A
,B
yC
son las distancias de los puntos(a,b)
,(c,d)
y(E,f)
, respectivamente. Para obtener una raíz cuadrada en el valor, escribasqrt
el valor en el cuadro.Verifique el primer caso de prueba .
O puedes echar un vistazo aquí:
fuente
C,
362348345 bytesDe entrada se da como una secuencia de flotadores separados por un espacio en la entrada estándar:
x1 y1 d1 x2 y2 d2 x3 y3 d3
. La salida es similar en la salida estándar:x y
.C
es un tipo de estructura cuyos miembros son una coordenada xa
, una coordenadab
y y una distancia (radio)c
. La funciónf
toma dosC
estructuras y un puntero a un flotador, y determina la línea en la que seC
cruzan (círculos). La intersección en y de esta línea se coloca en el flotador apuntado y se devuelve la pendiente.El programa llama
f
a dos pares de círculos, luego determina la intersección de las líneas producidas.fuente
f
producidas nunca serán paralelas. Las pruebas son para garantizar que tampoco sean verticales, ya que estoy usando la forma pendiente-intersección. De esta manera, siempre hay exactamente una respuesta.Python - 172
Toma la entrada como una lista de tuplas de forma (x, y, d). Avíseme si ve una manera de jugar golf más allá, ¡siento que debe haberla, pero no puedo entenderlo!
fuente
-1 if 1 else 1
puede convertirse,-1if 1else 1
por ejemplo. Esto también funciona con paréntesis. Hay algunos lugares donde puede aprovechar eso. También.5
es lo mismo que0.5
.