In der speziellen Relativitätstheorie ist die Geschwindigkeit eines sich bewegenden Objekts relativ zu einem anderen Objekt, das sich in die entgegengesetzte Richtung bewegt, durch die Formel gegeben:
s = ( v + u ) / ( 1 + v * u / c ^ 2)
In dieser Formel sind und die Größen der Geschwindigkeiten der Objekte und ist die Lichtgeschwindigkeit (die ungefähr 3,0 × 10 8 beträgt , eine Annäherung nahe genug für diese Herausforderung).
Wenn sich beispielsweise ein Objekt bewegt v = 50,000 m/s
und ein anderes Objekt sich bewegt u = 60,000 m/s
, wäre die Geschwindigkeit jedes Objekts relativ zum anderen ungefähr s = 110,000 m/s
. Dies ist, was Sie unter der galiläischen Relativitätstheorie erwarten würden (wo Geschwindigkeiten einfach addieren). Wenn v = 50,000,000 m/s
und jedoch, wäre u = 60,000,000 m/s
die Relativgeschwindigkeit ungefähr 106,451,613 m/s
, was sich signifikant von der 110,000,000 m/s
durch die galiläische Relativitätstheorie vorhergesagten unterscheidet .
Die Herausforderung
Wenn zwei ganze Zahlen v
und u
solche gegeben sind 0 <= v,u < c
, berechnen Sie die relativistische Additivgeschwindigkeit unter Verwendung der obigen Formel mit c = 300000000
. Die Ausgabe muss entweder ein Dezimalwert oder ein reduzierter Bruch sein. Die Ausgabe muss innerhalb 0.001
des tatsächlichen Werts für einen Dezimalwert oder genau für einen Bruch liegen.
Testfälle
Format: v, u -> exact fraction (float approximation)
50000, 60000 -> 3300000000000/30000001 (109999.99633333346)
50000000, 60000000 -> 3300000000/31 (106451612.90322581)
20, 30 -> 7500000000000000/150000000000001 (49.999999999999666)
0, 20051 -> 20051 (20051.0)
299999999, 299999999 -> 53999999820000000000000000/179999999400000001 (300000000.0)
20000, 2000000 -> 4545000000000/2250001 (2019999.1022226212)
2000000, 2000000 -> 90000000000/22501 (3999822.2301231055)
1, 500000 -> 90000180000000000/180000000001 (500000.9999972222)
1, 50000000 -> 90000001800000000/1800000001 (50000000.972222224)
200000000, 100000000 -> 2700000000/11 (245454545.45454547)
quelle
s/velocity/Velocity of an Unladen Swallow/g
Antworten:
MATL , 9 Bytes
Probieren Sie es online aus!
quelle
Mathematica, 17 Bytes
Eine unbenannte Funktion, die zwei Ganzzahlen verwendet und einen exakten Bruch zurückgibt.
Erläuterung
Dies verwendet zwei nette Tricks mit der Argumentsequenz
##
, wodurch ich vermeiden kann, auf die einzelnen Argumenteu
undv
separat zu verweisen .##
Erweitert sich zu einer Folge aller Argumente, die eine Art "entpackte Liste" darstellt. Hier ist ein einfaches Beispiel:gibt
Das gleiche funktioniert in beliebigen Funktionen (da
{...}
ist nur eine Abkürzung fürList[...]
):gibt
Jetzt können wir auch
##
Operatoren übergeben, die sie für den Operator zunächst als einen einzelnen Operanden behandeln. Dann wird der Operator in seine vollständige Form erweitertf[...]
, und erst dann wird die Sequenz erweitert. In diesem Fall+##
istPlus[##]
diesPlus[u, v]
der Zähler, den wir wollen.Im Nenner hingegen
##
erscheint als linker Operator von/
. Der Grund dafür ist multipliziertu
undv
eher subtil./
wird implementiert in Bezug aufTimes
:Also, wenn es
a
ist##
, wird es danach erweitert und wir enden mitHier
*^
ist nur Mathematicas Operator für die wissenschaftliche Notation.quelle
Gelee, 9 Bytes
Probieren Sie es online aus! Wenn Sie Brüche bevorzugen, können Sie alternativ denselben Code mit M ausführen .
Wie es funktioniert
quelle
Python3,
55 3129 BytesPython ist schrecklich, um Eingaben zu erhalten, wie jede Eingabe benötigt,
int(input())
aber hier ist trotzdem meine Lösung:v, u = int (Eingabe ()), int (Eingabe ()); print ((v + u) / (1 + v * u / 9e16))Dank @Jakube brauche ich eigentlich nicht das ganze Programm, nur die Funktion. Daher:
Eher selbsterklärend,
Eingaben erhalten,rechnen. Ich habe c ^ 2 verwendet und vereinfacht, dass 9e16 kürzer als (3e8 ** 2) ist.Python2, 42 Bytes
Danke an @muddyfish
quelle
int(input())
und durch ersetzeninput()
. Sie können auch die Klammern um die Druckanweisung löschenlambda u,v:(v+u)/(1+v*u/9e16)
, und dies funktioniert sowohl für Python 2 als auch für 3.J,
1311 BytesVerwendungszweck
Wo
>>
ist STDIN und<<
ist STDOUT.quelle
Matlab, 24 Bytes
Anonyme Funktion, die zwei Eingaben akzeptiert. Nichts Besonderes, nur der Vollständigkeit halber eingereicht.
quelle
CJam, 16 Bytes
Ich bin mir immer noch sicher, dass hier Bytes gespeichert werden müssen
quelle
q~d]_:+\:*9e16/)/
d
wie man so arbeitet, kann aber nicht glauben, dass ich den Inkrement-Operator verpasst habe ...q~_:+\:*9.e16/)/
Dyalog APL , 11 Bytes
Der Bruchteil der Summe und [das Inkrement der Teilungen von neunzig Billiarden und des Produkts]:
÷⍨
ist "dividiert", wie in "neunzig Billiarden dividiert n ", dh äquivalent zu n geteilt durch neunzig Billiarden.quelle
Haskell, 24 Bytes
Als einzelne Funktion, die je nach Kontext, in dem sie verwendet wird, entweder eine Gleitkomma- oder eine Bruchzahl bereitstellen kann ...
Anwendungsbeispiel in REPL:
quelle
u#v
stattr u v
.Pyke, 12 Bytes
Probieren Sie es hier aus!
quelle
Pyth, 14 Bytes
Testsuite.
Formel:
sum(input) / (1 + (product(input) / 9e16))
Bonus: hier klicken!
quelle
Javascript 24 Bytes
Dank @LeakyNun 4 Bytes rasiert
Ziemlich einfach
quelle
v=>u=>(v+u)/(1+v*u/9e16)
okJulia, 22 Bytes
Probieren Sie es online aus!
quelle
Noether , 24 Bytes
Nicht konkurrierend
Probieren Sie es hier aus!
Noether scheint eine geeignete Sprache für die Herausforderung zu sein, da Emmy Noether Pionierarbeit für die Symmetrieideen geleistet hat, die zu Einsteins Gleichungen führen (dies
E = mc^2
usw.).Auf jeden Fall ist dies im Grunde eine Übersetzung der gegebenen Gleichung in die umgekehrte polnische Notation.
quelle
TI-BASIC, 12 Bytes
Nimmt die Eingabe als eine Liste von
{U,V}
aufAns
.quelle
PowerShell, 34 Byte
Extrem unkomplizierte Implementierung. Keine Hoffnung, jemanden einzuholen, dank der 6
$
erforderlichen.quelle
Oracle SQL 11.2, 39 Bytes
quelle
T-SQL, 38 Bytes
Probieren Sie es online aus!
Einfache Formelimplementierung.
quelle
ForceLang, 116 Bytes
Nicht konkurrierend, verwendet Sprachfunktionen, die hinzugefügt wurden, nachdem die Herausforderung veröffentlicht wurde.
quelle
TI-Basic, 21 Bytes
quelle
E
2 Bytes wert?Gleichstrom, 21 Bytes
Dies setzt voraus, dass die Genauigkeit bereits eingestellt wurde, z
20k
. B. mit . Fügen Sie 3 Bytes hinzu, wenn Sie diese Annahme nicht treffen können.Eine genauere Version ist
bei 24 Bytes.
Beide sind einigermaßen getreue Transkriptionen der Formel, wobei das einzige bemerkenswerte Golfspiel die Verwendung
9I16^*
für c² ist.quelle
PHP,
4445 BytesAnonyme Funktion, ziemlich einfach.
quelle
c^2
im Nenner ... dh9e16
oder gleichwertig.Eigentlich 12 Bytes
Probieren Sie es online aus!
Erläuterung:
quelle
Java (JDK) , 24 Byte
Probieren Sie es online aus!
quelle
Forth (gforth) , 39 Bytes
Probieren Sie es online aus!
Code Erklärung
quelle