W szczególnej teorii względności prędkość poruszającego się obiektu w stosunku do innego obiektu poruszającego się w przeciwnym kierunku jest podana wzorem:
s = ( v + u ) / ( 1 + v * u / c ^ 2)
W tym wzorze i są wielkościami prędkości obiektów, a jest prędkością światła (która wynosi około , co jest wystarczająco bliskim przybliżeniem wyzwanie).
Na przykład, jeśli jeden obiekt się porusza v = 50,000 m/s
, a inny obiekt się porusza u = 60,000 m/s
, prędkość każdego obiektu względem drugiego będzie w przybliżeniu s = 110,000 m/s
. Tego można się spodziewać przy względności Galilejskiej (gdzie prędkości po prostu dodają). Jednak jeśli v = 50,000,000 m/s
i u = 60,000,000 m/s
, prędkość względna byłaby w przybliżeniu 106,451,613 m/s
, co znacznie różni się od 110,000,000 m/s
przewidywanej na podstawie względności Galileusza.
Wyzwanie
Biorąc pod uwagę dwie liczby całkowite v
i u
takie 0 <= v,u < c
, oblicz relatywistyczną prędkość addytywną, stosując powyższy wzór, z c = 300000000
. Dane wyjściowe muszą być wartością dziesiętną lub ułamkiem zmniejszonym. Dane wyjściowe muszą zawierać się w granicach 0.001
wartości rzeczywistej dla wartości dziesiętnej lub dokładnej dla ułamka.
Przypadki testowe
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)
źródło
s/velocity/Velocity of an Unladen Swallow/g
Odpowiedzi:
MATL , 9 bajtów
Wypróbuj online!
źródło
Mathematica, 17 bajtów
Funkcja bez nazwy, która przyjmuje dwie liczby całkowite i zwraca dokładną część ułamkową.
Wyjaśnienie
Używa to dwóch fajnych sztuczek z sekwencją argumentów
##
, co pozwala mi uniknąć odwoływania się do poszczególnych argumentówu
iv
osobno.##
rozwija się do sekwencji wszystkich argumentów, która jest jakby „nieopakowaną listą”. Oto prosty przykład:daje
To samo działa w przypadku dowolnych funkcji (ponieważ
{...}
jest to tylko skrótList[...]
):daje
Teraz możemy również przekazać
##
operatorom, którzy najpierw traktują ich jako pojedynczy operand, jeśli chodzi o operatora. Następnie operator zostanie rozwinięty do pełnej postacif[...]
i dopiero wtedy sekwencja zostanie rozszerzona. W tym przypadku+##
jestPlus[##]
toPlus[u, v]
, co jest , tzn. Licznik, który chcemy.Z drugiej strony w mianowniku
##
pojawia się jako operator po lewej stronie/
. Powód tego się zwielokrotniau
iv
jest raczej subtelny./
jest wdrażany w zakresieTimes
:Więc kiedy
a
jest##
, zostaje później rozszerzony i ostatecznieTutaj
*^
jest tylko operatorem Mathematica dla notacji naukowej.źródło
Galaretka, 9 bajtów
Wypróbuj online! Ewentualnie, jeśli wolisz frakcje, można wykonać ten sam kod z M .
Jak to działa
źródło
Python3,
55 3129 bajtówPython jest okropny w uzyskiwaniu danych wejściowych, ponieważ każde z nich potrzebuje,
int(input())
ale oto moje rozwiązanie:v, u = int (input ()), int (input ()); print ((v + u) / (1 + v * u / 9e16))Dzięki @Jakube tak naprawdę nie potrzebuję całej gry, tylko funkcję. W związku z tym:
Raczej zrozumiałe,
uzyskaj dane wejściowe,obliczenia. Użyłem c ^ 2 i uprościłem, że ponieważ 9e16 jest krótszy niż (3e8 ** 2).Python2, 42 bajty
Dzięki @muddyfish
źródło
int(input())
i zastąpić goinput()
, możesz także upuścić nawiasy wokół instrukcji printlambda u,v:(v+u)/(1+v*u/9e16)
, a to działa zarówno dla Pythona 2, jak i 3.J,
1311 bajtówStosowanie
Gdzie
>>
jest STDIN i<<
STDOUT.źródło
Matlab, 24 bajty
Anonimowa funkcja, która pobiera dwa dane wejściowe. Nic szczególnego, po prostu poddane kompletności.
źródło
CJam, 16 bajtów
Nadal jestem pewien, że są tu bajty do zapisania
źródło
q~d]_:+\:*9e16/)/
d
takiej pracy, ale nie mogę uwierzyć, że przegapiłem operatora przyrostowego ....q~_:+\:*9.e16/)/
Dyalog APL , 11 bajtów
Ułamek sumy i [przyrost podziałów dziewięćdziesięciu biliardów i iloczyn]:
÷⍨
to „dzieli”, jak w „dziewięćdziesięciu biliardach dzieli n ”, tj. jest równoważne n podzielone przez dziewięćdziesiąt biliardów.źródło
Haskell, 24 bajty
Jako pojedyncza funkcja, która może zapewnić liczbę zmiennoprzecinkową lub liczbę ułamkową, w zależności od kontekstu, w którym jest używana ...
Przykładowe użycie w REPL:
źródło
u#v
zamiastr u v
.Pyke, 12 bajtów
Wypróbuj tutaj!
źródło
Pyth, 14 bajtów
Zestaw testowy.
Formuła:
sum(input) / (1 + (product(input) / 9e16))
Bonus: kliknij tutaj!
źródło
Javascript 24 bajty
Wygolono 4 bajty dzięki @LeakyNun
Całkiem proste
źródło
v=>u=>(v+u)/(1+v*u/9e16)
dobrze?Julia, 22 bajty
Wypróbuj online!
źródło
Noether , 24 bajty
Nie konkuruje
Wypróbuj tutaj!
Wydaje się, że Noether jest odpowiednim językiem dla tego wyzwania, biorąc pod uwagę, że Emmy Noether była pionierem idei symetrii, które prowadzą do równań Einsteina (to
E = mc^2
itp.)W każdym razie jest to w zasadzie tłumaczenie danego równania na odwrotną notację polską.
źródło
TI-BASIC, 12 bajtów
Bierze wkład w postaci listy
{U,V}
naAns
.źródło
PowerShell, 34 bajty
Niezwykle prosta implementacja. Nie ma jednak nadziei na dogonienie kogoś dzięki
$
wymaganym 6 .źródło
Oracle SQL 11.2, 39 bajtów
źródło
T-SQL, 38 bajtów
Wypróbuj online!
Prosta implementacja formuły.
źródło
ForceLang, 116 bajtów
Niekonkurencyjny, wykorzystuje funkcjonalność języka dodaną po opublikowaniu wyzwania.
źródło
TI-Basic, 21 bajtów
źródło
E
wartość 2 bajtów nie jest warta?dc, 21 bajtów
Zakłada się, że precyzja została już ustawiona, np
20k
. Za pomocą . Dodaj 3 bajty, jeśli nie możesz przyjąć tego założenia.Bardziej dokładna wersja to
24 bajty.
Oba są dość wiernymi transkrypcjami formuły, a jedynym znaczącym golfem jest użycie
9I16^*
c².źródło
PHP,
4445 bajtówFunkcja anonimowa, dość prosta.
źródło
c^2
w mianowniku ... czyli9e16
równoważnym.Właściwie 12 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Java (JDK) , 24 bajty
Wypróbuj online!
źródło
Dalej (gforth) , 39 bajtów
Wypróbuj online!
Objaśnienie kodu
źródło