सापेक्ष वेग की गणना करें


10

में विशेष सापेक्षता , एक और उद्देश्य यह है कि विपरीत दिशा में आगे बढ़ रहा है करने के लिए एक चलती वस्तु रिश्तेदार के वेग सूत्र द्वारा दिया जाता है:

s=v+u1+vu/c2.

s = ( v + u ) / ( 1 + v * u / c ^ 2)

इस सूत्र में, और ऑब्जेक्ट्स के वेगों के परिमाण हैं, और प्रकाश की गति है (जो लगभग , इसके लिए पर्याप्त निकट सन्निकटन है चुनौती)।vuc3.0×108m/s

उदाहरण के लिए, यदि एक वस्तु आगे बढ़ रही थी v = 50,000 m/s, और दूसरी वस्तु चल रही थी u = 60,000 m/s, तो प्रत्येक वस्तु का वेग दूसरे के सापेक्ष होगा s = 110,000 m/s। यह वही है जो आप गैलिलियन सापेक्षता के तहत उम्मीद करेंगे (जहां वेग बस जोड़ते हैं)। हालांकि, अगर v = 50,000,000 m/sऔर u = 60,000,000 m/s, सापेक्ष वेग लगभग होगा 106,451,613 m/s, जो 110,000,000 m/sगैलिलियन सापेक्षता द्वारा भविष्यवाणी की तुलना में काफी अलग है ।

चुनौती

दो पूर्णांकों vऔर uइस तरह 0 <= v,u < cके दिए गए, उपर्युक्त सूत्र का उपयोग करके, सापेक्ष additive वेग की गणना करें c = 300000000। आउटपुट या तो दशमलव मान या कम अंश होना चाहिए। आउटपुट को 0.001दशमलव मान के लिए वास्तविक मान या अंश के लिए सटीक होना चाहिए ।

परीक्षण के मामलों

प्रारूप: 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)

7
s/velocity/Velocity of an Unladen Swallow/g
mbomb007

1
"गैलिलियन सापेक्षता"? Gaillilean यांत्रिकी, शायद, लेकिन मैं आपके वाक्यांश को एक ऑक्सीमोरन (संभवतः एक एनाक्रोनॉस्टिक रेट्रॉनिक, भी) कहूंगा। अच्छा PPCG प्रश्न, हालांकि!
टोबे स्पाइट

जवाबों:



11

गणितज्ञ, 17 बाइट्स

+##/(1+##/9*^16)&

एक अनाम फ़ंक्शन दो पूर्णांक ले रहा है और एक सटीक अंश लौटा रहा है।

व्याख्या

यह तर्क क्रम के साथ## दो अच्छी चाल का उपयोग करता है , जो मुझे अलग-अलग तर्कों uऔर vअलग से संदर्भित करने से बचने की अनुमति देता है । सभी तर्कों के ##एक क्रम का विस्तार करता है , जो "अलिखित सूची" की तरह है। ये रहा एक सरल उदाहरण:

{x, ##, y}&[u, v]

देता है

{x, u, v, y}

मनमाने कार्यों के अंदर एक ही काम करता है (चूंकि {...}केवल इसके लिए शॉर्टहैंड है List[...]):

f[x, ##, y]&[u, v]

देता है

f[x, u, v, y]

अब हम उन ##ऑपरेटरों को भी सौंप सकते हैं जो पहले ऑपरेटर के रूप में जहां तक ​​ऑपरेटर का सवाल है, उन्हें एक ही ऑपरेंड के रूप में मानेंगे। फिर ऑपरेटर को उसके पूर्ण रूप में विस्तारित किया जाएगा f[...], और उसके बाद ही अनुक्रम का विस्तार किया जाएगा। इस मामले +##में Plus[##]जो है Plus[u, v], यानी हम चाहते हैं अंश।

दूसरी ओर हर ##में, बाएं हाथ के ऑपरेटर के रूप में दिखाई देता है /। इसका कारण यह गुणा uऔर vसूक्ष्म है। /के संदर्भ में कार्यान्वित किया जाता है Times:

FullForm[a/b]
(* Times[a, Power[b, -1]] *)

इसलिए जब aयह होता है ##, तो बाद में इसका विस्तार हो जाता है और हम समाप्त हो जाते हैं

Times[u, v, Power[9*^16, -1]]

यहाँ, *^वैज्ञानिक संकेतन के लिए सिर्फ मैथेमेटिका का संचालक है।


4

जेली, 9 बाइट्स

÷3ȷ8P‘÷@S

इसे ऑनलाइन आज़माएं! वैकल्पिक रूप से, यदि आप भिन्न पसंद करते हैं, तो आप एम के साथ एक ही कोड निष्पादित कर सकते हैं ।

यह काम किस प्रकार करता है

÷3ȷ8P‘÷@S  Main link. Argument: [u, v]

÷3ȷ8       Divide u and v by 3e8.
    P      Take the product of the quotients, yielding uv ÷ 9e16.
     ‘     Increment, yielding 1 + uv ÷ 9e16.
        S  Sum; yield u + v.
      ÷@   Divide the result to the right by the result to the left.

3

पायथन 3, 55 31 29 बाइट्स

अजगर इनपुट के रूप में प्रत्येक इनपुट की जरूरत के लिए भयानक है, int(input()) लेकिन यहाँ मेरे समाधान वैसे भी है:

वी, यू = पूर्णांक (इनपुट ()), पूर्णांक (इनपुट ()); प्रिंट ((v यू +) / (1 + v * यू / 9e16))

@Jakube के लिए धन्यवाद, मुझे वास्तव में पूरे प्रोगाम की ज़रूरत नहीं है, बस फ़ंक्शन। इसलिये:

lambda u,v:(v+u)/(1+v*u/9e16)

आत्म व्याख्यात्मक होने के बजाय, इनपुट प्राप्त करें, गणना करें। मैंने c ^ 2 का उपयोग किया है और सरल किया है कि 9e16 से कम है (3e8 ** 2)।

पायथन 2, 42 बाइट्स

v,u=input(),input();print(v+u)/(1+v*u/9e16)

@Muddyfish को धन्यवाद


1
यदि आप python2 का उपयोग करते हैं, तो आप ड्रॉप कर सकते हैं int(input())और इसे बदल input()सकते हैं, आप ब्रैकेट को प्रिंट स्टेटमेंट के साथ भी छोड़ सकते हैं
ब्लू

@Jakube हालांकि आपको इनपुट कैसे मिलेंगे? ओपी का कहना है कि "दो पूर्णांक v और u को देखते हुए"
जॉर्ज

@ जाकुब हां, यह होगा कि मैं इसमें लैम्बडा का उपयोग कैसे करूंगा, लेकिन ओपी पूरे कार्यक्रम के लिए केवल एक समारोह ही नहीं कह रहा है। इसका एक इनपुट और एक आउटपुट है
जॉर्ज

@ जकात अच्छी तरह से उस मामले में मैं इसे थोड़ा नीचे गोल्फ। चीयर्स!
जॉर्ज

आपके पास lambda u,v:(v+u)/(1+v*u/9e16)यह हो सकता है , और यह पायथन 2 और 3 के लिए काम करता है
mbomb007

2

जे, 13 11 बाइट्स

+%1+9e16%~*

प्रयोग

>> f =: +%1+9e16%~*
>> 5e7 f 6e7
<< 1.06452e8

जहाँ >>STDIN है और <<STDOUT है।


2

मतलाब, 24 बाइट्स

@(u,v)(u+v)/(1+v*u/9e16)

बेनामी फ़ंक्शन जो दो इनपुट लेता है। कुछ भी नहीं फैंसी, बस पूर्णता के लिए प्रस्तुत किया।


मेरा सुझाव है कि आप शीर्षक से "नियमित" हटा दें। यदि एक टूलबॉक्स का उपयोग किया गया था, तो इसका उल्लेख करना होगा; इसलिए आप सुरक्षित रूप से सिर्फ "मतलाब" कह सकते हैं। ओह और पीपीसीजी में आपका स्वागत है!
लुइस मेन्डो

2

सीजेएम, 16 बाइट्स

q~_:+\:*9.e16/)/

मुझे अब भी यकीन है कि यहां बाइट्स बचाए जाएंगे


यहाँ उन बाइट्स में से दो हैं:q~d]_:+\:*9e16/)/
मार्टिन एंडर

@MartinEnder धन्यवाद, उस dतरह से काम करने के बारे में नहीं पता था, लेकिन विश्वास नहीं कर सकता कि मैं वेतन वृद्धि करने से चूक गया ....
A Simmons

सरणी इनपुट के साथ 1 बाइट कम:q~_:+\:*9.e16/)/
लुइस मेंडो

2

दिल्लोग एपीएल , 11 बाइट्स

+÷1+9E16÷⍨×

राशि का अंश और [नब्बे क्वाड्रिलियन और उत्पाद के विभाजन की वृद्धि]:

┌─┼───┐         
+ ÷ ┌─┼──────┐  
    1 + ┌────┼──┐
        9E16 ÷⍨ ×

÷⍨"विभाजित", "नब्बे क्वाड्रिलियन विभाजित में के रूप में है n " यानी के बराबर n नब्बे क्वाड्रिलियन से विभाजित।


निश्चित रूप से यह 11 अक्षर है, बाइट्स नहीं, क्योंकि मुझे पूरा यकीन है कि उनमें से कुछ प्रतीक ASCII में नहीं हैं?
जूल्स

@ जूल्स यूटीएफ -8 में, निश्चित रूप से, लेकिन एपीएल के अपने स्वयं के कोड पृष्ठ हैं, जो कुछ दशकों तक यूनिकोड से पहले हैं।
डेनिस

2

हास्केल, 24 बाइट्स

एक ऐसे फंक्शन के रूप में जो या तो एक फ्लोटिंग पॉइंट या फ्रैक्शनल नंबर प्रदान कर सकता है, यह उस संदर्भ पर निर्भर करता है जिसमें इसका उपयोग किया गया है ...

r u v=(u+v)/(1+v*u/9e16)

REPL में उदाहरण उपयोग:

*Main> r 20 30
49.999999999999666
*Main> default (Rational)
*Main> r 20 30 
7500000000000000 % 150000000000001

के u#vबजाय परिभाषित करके दो बाइट्स सहेजें r u v
Zgarb


1

अजगर, 14 बाइट्स

csQhc*FQ*9^T16

परीक्षण सूट।

सूत्र: sum(input) / (1 + (product(input) / 9e16))

बोनस: यहाँ क्लिक करें!


5
यह वास्तव में "FGITW" को हर समाधान पर शामिल करने के लिए अनावश्यक है जो एक चुनौती पर पहला है।
Mego

क्षमा करें, मैंने इसे हटा दिया है।
लीक नून



1

नोथर , 24 बाइट्स

गैर-प्रतिस्पर्धा

I~vI~u+1vu*10 8^3*2^/+/P

यहाँ कोशिश करो!

नोथर को दी गई चुनौती के लिए एक उपयुक्त भाषा लगती है कि एमी नोथेर ने समरूपता के विचारों का नेतृत्व किया जो आइंस्टीन के समीकरणों (इस, E = mc^2आदि) को जन्म देता है ।

वैसे भी, यह मूल रूप से दिए गए समीकरण का रिवर्स पॉलिश नोटेशन का अनुवाद है।


1

टीआई-बेसिक, 12 बाइट्स

:sum(Ans/(1+prod(Ans/3ᴇ8

की एक सूची के रूप में इनपुट लेता है {U,V}पर Ans


0

पॉवरशेल, 34 बाइट्स

param($u,$v)($u+$v)/(1+$v*$u/9e16)

बेहद सीधा-सादा अमल। किसी के साथ पकड़ने की कोई उम्मीद नहीं है, हालांकि, $आवश्यक 6 के लिए धन्यवाद ।


0

Oracle SQL 11.2, 39 बाइट्स

SELECT (:v+:u)/(1+:v*:u/9e16)FROM DUAL;


0

फोर्सलैंग, 116 बाइट्स

नॉनकंपेटिंग, चुनौती पोस्ट किए जाने के बाद जोड़ा गया भाषा कार्यक्षमता का उपयोग करता है।

def r io.readnum()
set s set
s u r
s v r
s w u+v
s c 3e8
s u u.mult v.mult c.pow -2
s u 1+u
io.write w.mult u.pow -1


0

डीसी, 21 बाइट्स

svddlv+rlv*9/I16^/1+/

यह मानता है कि सटीक पहले से ही निर्धारित किया गया है, जैसे 20k। यदि आप उस धारणा को नहीं बना सकते हैं तो 3 बाइट्स जोड़ें।

एक अधिक सटीक संस्करण है

svdlv+9I16^*dsc*rlv*lc+/

24 बाइट्स पर।

वे दोनों ही फार्मूले के उचित रूप से वफादार विवरण हैं, एकमात्र उल्लेखनीय गोल्फिंग का उपयोग 9I16^*c² के लिए किया जा रहा है ।


0

PHP, 44 45 बाइट्स

अनाम फ़ंक्शन, बहुत सीधा।

function($v,$u){echo ($v+$u)/(1+$v*$u/9e16);}

3
आप c^2भाजक में की जरूरत है ... यानी, 9e16या समकक्ष।
AdmBorkBork



0

फोर्थ (gforth) , 39 बाइट्स

: f 2dup + s>f * s>f 9e16 f/ 1e f+ f/ ;

इसे ऑनलाइन आज़माएं!

कोड स्पष्टीकरण

: f            \ start a new work definition
  2dup +       \ get the sum of u and v
  s>f          \ move to top of floating point stack
  * s>f        \ get the product of u and v and move to top of floating point stack
  9e16 f/      \ divide product by 9e16 (c^2)
  1e f+        \ add 1
  f/           \ divide the sum of u and v by the result
;              \ end word definition
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.