Dalam relativitas khusus , kecepatan objek bergerak relatif terhadap objek lain yang bergerak berlawanan arah diberikan oleh rumus:
s = ( v + u ) / ( 1 + v * u / c ^ 2)
Dalam rumus ini, dan adalah besarnya kecepatan benda, dan adalah kecepatan cahaya (yaitu sekitar , perkiraan yang cukup dekat untuk ini tantangan).
Misalnya, jika satu objek bergerak pada v = 50,000 m/s
, dan objek lain bergerak pada u = 60,000 m/s
, kecepatan masing-masing objek relatif terhadap yang lain akan sekitar s = 110,000 m/s
. Inilah yang Anda harapkan di bawah relativitas Galilea (di mana kecepatan ditambahkan begitu saja). Namun, jika v = 50,000,000 m/s
dan u = 60,000,000 m/s
, kecepatan relatifnya akan mendekati 106,451,613 m/s
, yang secara signifikan berbeda dari yang 110,000,000 m/s
diprediksi oleh relativitas Galilea.
Tantangan
Diberikan dua bilangan bulat v
dan u
sedemikian rupa 0 <= v,u < c
, hitung kecepatan aditif relativistik, dengan menggunakan rumus di atas, dengan c = 300000000
. Output harus berupa nilai desimal atau fraksi tereduksi. Output harus dalam 0.001
nilai aktual untuk nilai desimal, atau tepat untuk sebagian kecil.
Uji Kasus
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)
sumber
s/velocity/Velocity of an Unladen Swallow/g
Jawaban:
MATL , 9 byte
Cobalah online!
sumber
Mathematica, 17 byte
Fungsi tanpa nama mengambil dua bilangan bulat dan mengembalikan pecahan yang tepat.
Penjelasan
Ini menggunakan dua trik yang bagus dengan urutan argumen
##
, yang memungkinkan saya untuk menghindari referensi argumen individuu
danv
secara terpisah.##
meluas ke urutan semua argumen, yang merupakan semacam "daftar tidak terbuka". Ini adalah contoh sederhana:memberi
Pekerjaan yang sama di dalam fungsi arbitrer (karena
{...}
hanya singkatan untukList[...]
):memberi
Sekarang kita juga dapat menyerahkan
##
kepada operator yang pertama-tama akan memperlakukan mereka sebagai operan tunggal sejauh menyangkut operator. Kemudian operator akan diperluas ke bentuk penuhf[...]
, dan hanya dengan demikian barulah urutannya diperluas. Dalam hal ini+##
adalahPlus[##]
yang manaPlus[u, v]
, yaitu pembilang yang kita inginkan.Di penyebut di sisi lain,
##
muncul sebagai operator kiri/
. Alasannya berlipat gandau
danv
agak halus./
diimplementasikan dalam halTimes
:Jadi ketika
a
adalah##
, hal itu akan diperluas setelah itu dan kami berakhir denganDi sini,
*^
hanya operator Mathematica untuk notasi ilmiah.sumber
Jelly, 9 byte
Cobalah online! Atau, jika Anda lebih suka pecahan, Anda dapat mengeksekusi kode yang sama dengan M .
Bagaimana itu bekerja
sumber
Python3,
55 3129 bytePython mengerikan untuk mendapatkan input karena setiap input membutuhkan
int(input())
tetapi inilah solusi saya:v, u = int (input ()), int (input ()); print ((v + u) / (1 + v * u / 9e16))Berkat @ Jakube saya tidak benar-benar membutuhkan seluruh prgrame, hanya fungsinya. Karenanya:
Cukup jelas sendiri,
dapatkan input,hitung. Saya telah menggunakan c ^ 2 dan menyederhanakannya karena 9e16 lebih pendek dari (3e8 ** 2).Python2, 42 byte
Berkat @muddyfish
sumber
int(input())
dan menggantinya denganinput()
, Anda juga dapat menjatuhkan tanda kurung di sekeliling pernyataan cetaklambda u,v:(v+u)/(1+v*u/9e16)
, dan ini berfungsi untuk Python 2 dan 3.J,
1311 bytePemakaian
Di mana
>>
STDIN dan<<
STDOUT.sumber
Matlab, 24 byte
Fungsi anonim yang mengambil dua input. Tidak ada yang mewah, hanya dikirimkan untuk kelengkapan.
sumber
CJam, 16 Bytes
Saya masih yakin ada byte yang harus disimpan di sini
sumber
q~d]_:+\:*9e16/)/
d
bekerja seperti itu tetapi tidak percaya saya melewatkan operator kenaikan ....q~_:+\:*9.e16/)/
Dyalog APL , 11 byte
Fraksi penjumlahan dan [pertambahan pembagian sembilan puluh kuadriliun dan produk]:
÷⍨
adalah "membagi", seperti dalam "sembilan puluh kuadriliun membagi n " yaitu setara dengan n dibagi dengan sembilan puluh kuadriliun.sumber
Haskell, 24 byte
Sebagai fungsi tunggal yang dapat memberikan titik apung atau angka fraksional, tergantung pada konteks di mana itu digunakan ...
Contoh penggunaan dalam REPL:
sumber
u#v
alih-alihr u v
.Pyke, 12 byte
Coba di sini!
sumber
Pyth, 14 byte
Suite uji.
Rumus:
sum(input) / (1 + (product(input) / 9e16))
Bonus: klik di sini!
sumber
Javascript 24 byte
Dicukur 4 byte berkat @LeakyNun
Cukup mudah
sumber
v=>u=>(v+u)/(1+v*u/9e16)
baik-baik saja?Julia, 22 byte
Cobalah online!
sumber
Noether , 24 byte
Non-bersaing
Coba di sini!
Noether tampaknya menjadi bahasa yang tepat untuk tantangan mengingat Emmy Noether memelopori ide-ide simetri yang mengarah pada persamaan Einstein (ini,
E = mc^2
dll.)Bagaimanapun, ini pada dasarnya adalah terjemahan dari persamaan yang diberikan untuk membalikkan notasi polish.
sumber
TI-BASIC, 12 byte
Mengambil input sebagai daftar
{U,V}
aktifAns
.sumber
PowerShell, 34 byte
Implementasi yang sangat mudah. Tidak ada harapan untuk mengejar ketinggalan dengan siapa pun, berkat 6 yang
$
diperlukan.sumber
Oracle SQL 11.2, 39 byte
sumber
T-SQL, 38 byte
Cobalah online!
Implementasi formula langsung.
sumber
ForceLang, 116 byte
Noncompeting, menggunakan fungsionalitas bahasa yang ditambahkan setelah tantangan diposting.
sumber
TI-Basic, 21 byte
sumber
E
bernilai 2 byte?dc, 21 byte
Ini mengasumsikan bahwa ketepatan sudah diatur, misalnya dengan
20k
. Tambahkan 3 byte jika Anda tidak dapat membuat asumsi itu.Versi yang lebih akurat adalah
pada 24 byte.
Keduanya transkripsi formula yang cukup beriman, dengan satu-satunya golf terkenal adalah penggunaan
9I16^*
untuk c².sumber
PHP,
4445 byteFungsi anonim, cukup mudah.
sumber
c^2
dalam penyebut ... yaitu,9e16
atau setara.Sebenarnya, 12 byte
Cobalah online!
Penjelasan:
sumber
Java (JDK) , 24 byte
Cobalah online!
sumber
Keempat (gforth) , 39 byte
Cobalah online!
Penjelasan Kode
sumber