Diese Frage ist etwas schwieriger als die ASCII-Art-Version. Es gibt keine Kunst, und jetzt können Sie Gleitkomma-Arithmetik machen!
Die Herausforderung
Die USS StackExchange bewegte sich durch das Gravitationsfeld des Planeten cg-00DLEF, als an Bord eine astronomische Explosion auftrat. Als Chefprogrammierer des Schiffes ist es Ihre Aufgabe, die Flugbahn Ihres Schiffes zu simulieren, um vorherzusagen, ob Sie gezwungen sind, im Sonnensystem von cg-00DELF zu landen. Während der Explosion wurde Ihr Schiff schwer beschädigt. Aufgrund des begrenzten freien DEEEPRAROM * des Raumschiffs müssen Sie Ihr Programm in möglichst wenigen Zeichen schreiben.
* Dynamisch ausführbarer elektronisch löschbarer programmierbarer Nur-Lese-Speicher mit wahlfreiem Zugriff
Die Simulation
Ähnlich wie bei der ASCII-Art-Version wird es die Idee von Zeitschritten geben. In der anderen Version war ein Zeitschritt relativ viel Zeit: Das Schiff konnte sich in einem einzigen Zeitschritt weit über die Schwerkraft eines Planeten hinausbewegen. Hier ist der Zeitschritt aufgrund der größeren Entfernungen eine viel kleinere Zeiteinheit. Ein wesentlicher Unterschied ist jedoch das Fehlen von Zellen. Die aktuelle Position und Geschwindigkeit des Raumschiffs sind Gleitkommazahlen, zusammen mit den Gravitationskräften. Eine weitere Änderung ist die Tatsache, dass Planeten jetzt viel größer sind.
Es werden bis zu drei Planeten in der Simulation sein. Alle drei haben eine bestimmte Position, einen bestimmten Radius und eine bestimmte Schwerkraft. Die Schwerkraft für jeden Planeten ist ein Vektor, der eine Kraft direkt in Richtung des Mittelpunkts des Planeten ausübt. Die Formel zum Ermitteln der Stärke dieses Vektors lautet (Gravity)/(Distance**2)
, wobei die Entfernung die genaue Entfernung vom Schiff zum Mittelpunkt des Planeten ist. Dies bedeutet, dass der Schwerkraft keine Grenzen gesetzt sind.
Zu einem bestimmten Zeitpunkt hat das Raumschiff eine Geschwindigkeit, die die Entfernung und den Winkel angibt, die es vom letzten Zeitschritt bis jetzt zurückgelegt hat. Das Schiff hat auch Schwung. Die Entfernung, die es zwischen dem aktuellen und dem nächsten Zeitschritt zurücklegen wird, ist die Summe seiner aktuellen Geschwindigkeit, die zu allen Schwerkraftvektoren an seiner Position addiert wird. Dies wird die neue Geschwindigkeit des Raumschiffs.
Jede Simulation hat ein Zeitlimit von 10000 Zeitschritten. Wenn sich das Raumschiff innerhalb eines Planeten bewegt (näher am Mittelpunkt des Planeten als am Radius des Planeten), stürzt es auf diesen Planeten ab. Wenn das Raumschiff bis zum Ende der Simulation nicht auf einen Planeten stürzt, wird angenommen, dass es der Schwerkraft entkommen ist. Es ist unwahrscheinlich, dass das Schiff so perfekt ausgerichtet werden kann, dass es 10000 Zeitschritte im Orbit bleibt, während es auf dem 10001. Zeitschritt abstürzt.
Eingang
Die Eingabe erfolgt über vier Leitungen nach STDIN. Jede Zeile besteht aus vier durch Kommas getrennten Zahlen. Hier ist das Format der Zahlen:
ShipLocX,ShipLocY,ShipVelX,ShipVelY
Planet1LocX,Planet1LocY,Planet1Gravity,Planet1Radius
Planet2LocX,Planet2LocY,Planet2Gravity,Planet2Radius
Planet3LocX,Planet3LocY,Planet3Gravity,Planet3Radius
Wenn es weniger als drei Planeten gibt, werden die verbleibenden Linien für alle Werte mit Nullen gefüllt. Hier ist eine Beispieleingabe:
60,0,0,10
0,0,4000,50
100,100,4000,50
0,0,0,0
Dies bedeutet, dass sich das Raumschiff bei (60,0) befindet und sich mit einer Geschwindigkeit von 10 Einheiten / Zeitschritt geradeaus "nach oben / Norden" bewegt. Es gibt zwei Planeten, einen bei (0,0) und einen bei (100,100). Beide haben eine Schwerkraft von 4000 und einen Radius von 50. Obwohl alle diese Zahlen Ganzzahlen sind, werden sie nicht immer Ganzzahlen sein.
Ausgabe
Die Ausgabe wird ein einzelnes Wort an STDOUT sein, um festzustellen, ob das Raumschiff abgestürzt ist oder nicht. Wenn das Schiff abstürzt, drucken Sie crash
. Andernfalls drucken escape
. Hier ist die erwartete Ausgabe für die obige Eingabe:
crash
Sie fragen sich vielleicht, was passiert ist. Hier ist ein Pastebin-Beitrag mit einem detaillierten Flugbuch für das Raumschiff. Die Zahlen helfen den Menschen nicht sehr gut, das Ereignis zu visualisieren, und so geschah Folgendes: Das Raumschiff schafft es, mit Hilfe der Schwerkraft des zweiten Planeten (im Nordosten) der Schwerkraft des ersten Planeten (im Westen) zu entkommen. Es bewegt sich nach Norden und verläuft dann leicht westlich des zweiten Planeten, wobei es kaum fehlt. Es krümmt sich dann um die Nordseite des Planeten und stürzt gegen die Ostseite des zweiten Planeten.
Einige weitere Fälle zur Prüfung
60,0,10,-10
0,0,2000,50
100,100,1357.9,47.5
0,0,0,0
Flucht (aufgrund des inversen Quadratgesetzes ist 2000 nicht viel Schwerkraft, wenn Sie 60 Einheiten entfernt sind)
0,0,0,0
100,100,20000,140
-50,-50,50,50
-100,-100,50,50
Absturz (der erste Planet ist extrem massiv und extrem nah)
0,0,0,0
0,0,0,0
0,0,0,0
0,0,0,0
Flucht (dies ist ein Randfall: Es gibt keine Planeten und eine einfache Interpretation würde nahelegen, dass sich das Raumschiff direkt über den Planeten befindet.)
Regeln, Einschränkungen und Hinweise
Das ist Code Golf. Es gelten die Standard-Code-Golfregeln. Ihr Programm sollte nur in druckbaren ASCII-Zeichen geschrieben werden. Sie können auf keine externe Datenbank zugreifen. Sie können Einträge in einer beliebigen Sprache verfassen (außer einer, die auf die Lösung dieser Herausforderung spezialisiert ist).
Übertragung beenden