introduction
Imaginez que vous êtes sur un plan cartésien bidimensionnel et que vous souhaitez déterminer votre position sur celui-ci. Vous connaissez 3 points sur cet avion et votre distance à chacun d'eux. Bien qu'il soit toujours possible de calculer votre position à partir de cela, faire cela dans votre tête est assez difficile. Vous décidez donc d'écrire un programme pour cela.
Le défi
Étant donné 3 points et votre distance par rapport à eux, sortez les coordonnées de votre position.
- L'entrée et la sortie peuvent être dans n'importe quel format pratique, y compris en utilisant des nombres complexes au lieu de vrais. Veuillez préciser dans votre réponse le format que vous utilisez.
- Vous obtiendrez toujours exactement 3 points distincts avec leur distance à vous.
- Les coordonnées et les distances seront flottantes avec une précision arbitraire. Votre sortie doit être correcte avec 3 décimales. L'arrondi dépend de vous. Veuillez préciser dans votre réponse.
- Vous pouvez supposer que les trois points ne sont pas colinéaires, il y aura donc toujours une solution unique.
- Vous n'êtes pas autorisé à renforcer brutalement la solution.
- Vous ne pouvez pas utiliser de modules internes qui banalisent ce problème particulier. Les extensions pour les normes vectorielles, etc. sont cependant autorisées.
Astuce pour commencer:
Pensez à un cercle autour de chacun de ces 3 points avec leur distance à vous comme rayon.
Règles
- Fonction ou programme complet autorisé.
- Règles par défaut pour les entrées / sorties.
- Des échappatoires standard s'appliquent.
- Il s'agit de code-golf , donc le nombre d'octets le plus bas l'emporte. Tiebreaker est une soumission antérieure.
Cas de test
Le format d'entrée pour un point ici est [[x,y],d]
avec x
et y
étant les coordonnées et d
étant la distance à ce point. Les 3 de ces points sont classés dans une liste. La sortie sera x
puis y
dans une liste.
[[[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]
Vous pouvez générer des cas de test supplémentaires avec ce programme Pyth . L'emplacement va sur la première ligne de l'entrée et les 3 points sont sur les 3 lignes suivantes.
Codage heureux!
solve
(étant donné trois équations de cercle) banaliser le problème? Je pensais que c'était le cas, mais si vous êtes d'accord avec de telles choses, je vais aller de l'avant et l'afficher.Réponses:
Desmos, 122 octets
Utilisation en ligne . Copiez + collez chaque équation dans une boîte d'équation, cliquez sur "ajouter tout" pour chaque boîte, puis cliquez sur le point d'intersection, puis entrez chaque valeur selon le cas. chacun de
A
,B
, etC
sont des distances pour les points(a,b)
,(c,d)
, et(E,f)
, respectivement. Pour obtenir une racine carrée dans la valeur, saisissezsqrt
ensuite la valeur dans la zone.Vérifiez le premier cas de test .
Ou vous pouvez jeter un œil ici:
la source
C,
362348345 octetsEntrée est donnée comme une séquence de flotteurs séparés par des espaces sur l' entrée standard:
x1 y1 d1 x2 y2 d2 x3 y3 d3
. La sortie est similaire sur stdout:x y
.C
est un type de structure dont les membres sont une coordonnée xa
, une coordonnée yb
et une distance (rayon)c
. La fonctionf
prend deuxC
structures et un pointeur sur un flotteur, et détermine la ligne à laquelle lesC
(cercles) se croisent. L'ordonnée à l'origine de cette ligne est placée dans le flotteur pointé et la pente est renvoyée.Le programme fait appel
f
à deux paires de cercles, puis détermine l'intersection des lignes produites.la source
f
produites ne seront jamais parallèles. Les tests visent à s'assurer qu'ils ne sont pas non plus verticaux, car j'utilise une forme d'interception de pente. De cette façon, il y a toujours exactement une réponse.Python - 172
Prend l'entrée comme une liste de tuples de forme (x, y, d). Faites-moi savoir si vous voyez un moyen de jouer au golf plus loin, j'ai l'impression qu'il doit y en avoir mais je ne peux pas le découvrir!
la source
-1 if 1 else 1
peut devenir-1if 1else 1
par exemple. Cela fonctionne également avec des crochets. Il y a quelques endroits où vous pouvez en profiter. Est également.5
le même que0.5
.