Einführung
Stellen Sie sich vor, Sie befinden sich auf einer zweidimensionalen kartesischen Ebene und möchten Ihre Position darauf bestimmen. Sie kennen 3 Punkte in dieser Ebene und Ihre Entfernung zu jedem von ihnen. Während es immer möglich ist, Ihre Position daraus zu berechnen, ist es ziemlich schwierig, dies in Ihrem Kopf zu tun. Also beschließen Sie, ein Programm dafür zu schreiben.
Die Herausforderung
Geben Sie bei 3 Punkten und Ihrer Entfernung zu ihnen die Koordinaten Ihrer Position aus.
- Die Eingabe und Ausgabe kann in jedem geeigneten Format erfolgen, einschließlich der Verwendung komplexer statt reeller Zahlen. Bitte klären Sie in Ihrer Antwort, welches Format Sie verwenden.
- Sie erhalten immer genau 3 verschiedene Punkte mit ihrer Entfernung zu Ihnen.
- Die Koordinaten und Abstände sind Gleitkommazahlen mit beliebiger Genauigkeit. Ihre Ausgabe muss auf 3 Dezimalstellen korrekt sein. Die Rundung liegt bei Ihnen. Bitte klären Sie in Ihrer Antwort.
- Sie können davon ausgehen, dass die drei Punkte nicht kollinear sind, sodass es immer eine eindeutige Lösung gibt.
- Sie dürfen die Lösung nicht brutal erzwingen.
- Sie dürfen keine integrierten Funktionen verwenden, die dieses spezielle Problem trivialisieren. Builtins für Vektornormen usw. sind jedoch zulässig.
Tipp, um loszulegen:
Stellen Sie sich einen Kreis um jeden dieser 3 Punkte mit ihrem Abstand zu Ihnen als Radius vor.
Regeln
- Funktion oder volles Programm erlaubt.
- Standardregeln für die Eingabe / Ausgabe.
- Es gelten Standardlücken .
- Dies ist Code-Golf , also gewinnt die niedrigste Byte-Anzahl. Tiebreaker ist eine frühere Einreichung.
Testfälle
Das Eingabeformat für einen Punkt ist hier [[x,y],d]
mit x
und y
als Koordinaten und d
als Abstand zu diesem Punkt. Die 3 dieser Punkte sind in einer Liste angeordnet. Die Ausgabe erfolgt x
und dann y
in einer 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]
Mit diesem Pyth-Programm können Sie zusätzliche Testfälle generieren . Die Position befindet sich in der ersten Zeile der Eingabe und die 3 Punkte befinden sich in den folgenden 3 Zeilen.
Viel Spaß beim Codieren!
solve
trivialisiert das Problem (drei Kreis Gleichungen gegeben)? Ich dachte es wäre, aber wenn du mit solchen Dingen einverstanden bist, werde ich es veröffentlichen.Antworten:
Desmos, 122 Bytes
Online-Nutzung . Kopieren Sie jede Gleichung und fügen Sie sie in ein Gleichungsfeld ein. Klicken Sie für jedes Feld auf "Alle hinzufügen", klicken Sie dann auf den Schnittpunkt und geben Sie den entsprechenden Wert ein. jeweils
A
,B
undC
die Abstände für die Punkte(a,b)
,(c,d)
, und(E,f)
sind. Um eine Quadratwurzel im Wert zu erhalten, geben Siesqrt
den Wert in das Feld ein.Überprüfen Sie den ersten Testfall .
Oder schauen Sie hier:
quelle
C
362348345 BytesDie Eingabe erfolgt als Folge von durch Leerzeichen getrennten Floats auf stdin :
x1 y1 d1 x2 y2 d2 x3 y3 d3
. Die Ausgabe ist auf stdout ähnlich :x y
.C
ist ein Strukturtyp, dessen Elemente eine x-Koordinatea
, eine y-Koordinateb
und ein Abstand (Radius) sindc
. Die Funktion verwendetf
zweiC
Strukturen und einen Zeiger auf einen Float und bestimmt die Linie, an der sich dieC
(Kreise) schneiden. Der y-Achsenabschnitt dieser Linie wird in den Schwimmer gelegt, und die Steigung wird zurückgegeben.Das Programm ruft
f
zwei Kreispaare auf und bestimmt dann den Schnittpunkt der erzeugten Linien.quelle
f
niemals parallel sein. Die Tests sollen sicherstellen, dass sie auch nicht vertikal sind, da ich die Steigungsschnittform verwende. Auf diese Weise gibt es immer genau eine Antwort.Python - 172
Nimmt die Eingabe als Liste von Formulartupeln (x, y, d) auf. Lassen Sie mich wissen, wenn Sie einen Weg sehen, wie Sie weiter Golf spielen können. Ich denke, es muss einen geben, aber ich kann es nicht herausfinden!
quelle
-1 if 1 else 1
kann zum-1if 1else 1
Beispiel werden. Dies funktioniert auch mit Klammern. Es gibt einige Stellen, an denen Sie dies nutzen können. Ist auch.5
das gleiche wie0.5
.