वोल्ट, एम्प, वाट्स और ओम: दो दिए गए, अन्य दो की गणना करें


27

ओम का नियम हमें बताता है कि ओह्स में एक प्रतिरोध (R) से प्रवाहित होने वाले amps में करंट (I) जब एक वोल्टेज (V) इसके पार लगाया जाता है तो इस प्रकार दिया जाता है:

V = I / R

इसी प्रकार उस प्रतिरोध से अलग होने वाले वाटों में शक्ति (P) निम्न द्वारा दी जाती है:

P = V * I

पुनर्व्यवस्था और प्रतिस्थापन द्वारा, सूत्र इन दो मात्राओं की गणना के लिए निकाले जा सकते हैं जब अन्य दो में से कोई भी दिया जाता है। ये सूत्र निम्नानुसार संक्षेप हैं (ध्यान दें कि यह छवि वोल्ट के Eबजाय उपयोग करती है V):

पूर्ण शक्ति भ्रष्ट बिल्कुल!  प्रतिरोध व्यर्थ है!

एक स्ट्रिंग में इन दो मात्राओं के इनपुट को देखते हुए, अन्य दो का उत्पादन करें।

  • जो भी प्रारूप आपकी भाषा के लिए उपयुक्त है, उसमें इनपुट संख्या दशमलव होगी। परिशुद्धता कम से कम 3 दशमलव स्थानों पर होनी चाहिए। ( IEEE 754-2008 बाइनरी 32 फ़्लोट्स पर्याप्त हैं।)
  • प्रत्येक इनपुट नंबर एक इकाई के साथ प्रत्यय होगा। यह V A W RVoltage, Amperage, Power and Resistance (या समतुल्य लोअरकेस) के लिए एक होगा। इसके अतिरिक्त, आप इसके Ωबजाय उपयोग कर सकते हैं R। इकाइयों में कोई दशमलव उपसर्ग (किलो-, चक्की, आदि) नहीं होंगे।
  • दो इनपुट मात्रा किसी भी क्रम में एक स्ट्रिंग में दी जाएगी, एक ही स्थान द्वारा अलग की जाएगी।
  • इनपुट मात्रा हमेशा वास्तविक संख्या 0 से अधिक होगी।
  • आउटपुट इनपुट के समान प्रारूप में होगा।
  • समीकरण हल करने वाले निर्माण बंद हो गए हैं।

उदाहरण इनपुट

1W 1A
12V 120R
10A 10V
8R 1800W
230V 13A
1.1W 2.333V

संगत आउटपुट

1V 1R
0.1A 1.2W
1R 100W
120V 15A
2990W 17.692R
0.471A 4.948R

यह ध्यान दिया जाना चाहिए कि इस चुनौती का समाधान प्रभावी रूप से आत्म-आक्रमण होगा। दूसरे शब्दों में, यदि आप इनपुट के लिए एक समाधान लागू करते हैं A Bऔर आउटपुट प्राप्त करते हैं C D, तो इनपुट के लिए एक समाधान लागू करते हैं C D, तो आउटपुट फिर से होना चाहिए A B, हालांकि संभवतः एफपी राउंडिंग के कारण ऑर्डर से बाहर हो गया और परेशान हो गया। इसलिए परीक्षण निविष्टियाँ और आउटपुट परस्पर विनिमय के लिए उपयोग किए जा सकते हैं।


क्या हम सभी 4 मानों का उत्पादन कर सकते हैं?
कैलक्यूलेटरफिलीन

@CatsAreFluffy नहीं - इनपुट और आउटपुट दोनों हमेशा 2 मान होंगे।
डिजिटल ट्रामा

12
यह वास्तव में सबसे तत्काल वर्णनात्मक शीर्षक हो सकता है जिसे मैंने कभी चुनौती के लिए देखा है।
एलेक्स ए।

4
@AlexA। हाँ, मैं कुछ आकर्षक और रोमांचक सोचने की कोशिश कर रहा था - यदि आप करेंगे तो विद्युतीकरण । लेकिन मैं कम आया - कैप्टन ओबरी ने दिन जीता
डिजिटल ट्रॉमा

जवाबों:


3

रूबी 171 बाइट्स

फ़ंक्शन तर्क के रूप में इनपुट। ट्रेलिंग स्पेस के साथ स्टडआउट के लिए आउटपुट (यदि आवश्यक हो तो संशोधित किया जा सकता है।)

->s{a,b,c,d=s.split.map{|z|[z[-1],z.to_f]}.sort.flatten
%w{EA9.EAAVAA.WVA GS;.A?#WWV.RRR}.map{|w|m=w[n=(a+c+?!).sum%10].ord;print (b**(m%9-4)*d**(m/9-5))**0.5,w[n+7],' '}}

व्याख्या

सभी फ़ार्मुलों को उस रूप में व्यक्त किया जा सकता है b**x*d**yजहाँ b & d दो इनपुट मान हैं और x & y शक्तियाँ हैं। गोल्फिंग कारणों से अभिव्यक्ति (b**x*d**y)**0.5को अंततः पसंद किया गया क्योंकि इसका मतलब है कि x और y रेंज -4 से 4 में पूर्णांक बन जाते हैं।

निम्न तालिका आवश्यक अभिव्यक्तियों को दर्शाती है (इनपुट को वर्णानुक्रम से क्रमबद्ध किया गया है) और शक्तियों के लिए एन्कोडेड मान। जहां x और y दोगुनी शक्तियां हैं, उन्हें (x+4)+(y+4)*9+9या तो समतुल्य रूप से कूटबद्ध किया जाता है (x+4)+(y+5)*9। यह मुद्रण योग्य ASCII श्रेणी में सभी एन्कोडिंग डालता है। पावर ऑपरेटरों को संक्षिप्तता के लिए सूत्रों से छोड़ दिया जाता है।

nइनपुट यूनिट प्रतीकों से बना चेकसम का एक प्रकार है; यह मान 0,1,2,4,5,6 ले सकता है (3 का उपयोग नहीं किया गया है)

n     formula 1 formula 2      formula 1                formula 2
value                      powers x+4 y+4 encoding   powers x+4 y+4 encoding

0      A*R=V    A2*R=W       1 1    6 6   69 E        2 1     8 6   71 G  
1    R-1*V=A  R-1*V2=W      -1 1    2 6   65 A       -1 2     2 8   83 S
2 R-.5*W.5=A R.5*W.5=V     -.5 .5   3 5   57 9       .5 .5    5 5   59 ;
3          .         .                       .                         .
4      A*V=W   A-1*V=R       1 1    6 6   69 E       -1 1     2 6   65 A
5    A-1*W=V   A-2*W=R      -1 1    2 6   65 A       -2 1     0 6   63 ?
6    V-1*W=A  V2*W-1=R      -1 1    2 6   65 A        2 -1    8 2   35 #

परीक्षण कार्यक्रम में अपराजित

f=->s{
  a,b,c,d=s.split.map{|z|[z[-1],z.to_f]}.        #split the input into an array [[symbol1,value1],[symbol2,value2]]
  sort.flatten                                   #sort alphabetically by symbol and flatten to assign the 4 objects to different variables
  n=(a+c+?!).sum%10                              #sum the ascii codes of the symbols (plus that of ! for good value distribution) and take mod 10. gives a number 0..6 (3 is not used)
  %w{EA9.EAAVAA.WVA GS;.A?#WWV.RRR}.             #for each of the outputs, there is a 14 character string. 1st 7 characters encode powers, 2nd 7 characters are output symbol
  map{|w|                                        #iterate through the 2 outputs
    m=w[n].ord                                   #select one character according to value of n and convert to a number encoding the powers to raise the two inputs to
    print (b**(m%9-4)*d**(m/9-5))**0.5,w[n+7],' '#decode the powers, evaluate the expression and output, append the unit symbol and a space
  }
}

f["6W 3A"]
puts
f["12V 120R"]
puts
f["10A 10V"]
puts
f["8R 1800W"]
puts
f["6W 2V"]
puts
f["2A 3R"]
puts

उत्पादन

2.0V 0.6666666666666666R
0.1A 1.2W
100.0W 1.0R
15.0A 120.0V
3.0A 0.6666666666666666R
6.0V 12.0W

2

पायथन 3, 329 347 343 339 326 305 267 251 249 245 237 बाइट्स

यह बहुत फूला हुआ है। वहाँ निश्चित रूप से अभी भी बहुत कुछ करना है।

संपादित करें: अस्थायी रूप से आउटपुट तय किया गया। किसी कारण से, return' '.join(str(eval(z[m][i]))+t[i]for i in range(2))ठीक से काम करने से इनकार करता है।

संपादित करें: गिरा दिया गया eval

यह फ़ंक्शन अब लेवल रिवर सेंट के उत्तर के कुछ हिस्सों को उधार लेता है । मैंने opsशब्दकोश को बदल दिया , पहले इसके exponent*2+4लिए संशोधित घातांक के एक शब्दकोश में b**((p-4)/2) * d**((q-4)/2), ताकि प्रत्येक pऔर qएक अंक संख्या हो। उदाहरण के लिए, b*d == b**1*d**1 == b**((6-4)/2)*d**((6-4)/2)और परिणाम 66शब्दकोश में होगा ।

फिर, मैंने शब्दकोश को zउन संशोधित घातांक और इकाइयों के साथ एक स्ट्रिंग में बदल दिया, जिनकी आवश्यकता एक पंक्ति में और एक विशेष क्रम में होती है। सबसे पहले, ARVWmod 10 में प्रत्येक वर्ण का ASCII मान है 5, 2, 6, 7। जब इनमें से कोई भी दो मान जोड़े जाते हैं, तो वे एक अद्वितीय संख्या मॉड 10 देते हैं। इस प्रकार, प्रत्येक दो-वर्ण संयोजन को एक अद्वितीय संख्या दी जा सकती है (ord(x[0]) + ord(y[10] + 3) % 10, जो AR: 0, AV: 4, AW: 5, RV: 1, RW: 2, VW: 6(लेवर रिवर सेंट के चेकसम के समान)। इस क्रम में होने वाले संशोधित घातांक की व्यवस्था करना, अर्थात [AR] [RV] [RW] [blank] [AV] [AW] [VW], zकुशलता से (बाइट्स के संदर्भ में) तक पहुँचने की अनुमति देता है।

संपादित करें: के तहत सूची समझ को गढ़ा return। की परिभाषा गढ़ी m

कोड:

def e(s):x,y=sorted((i[-1],float(i[:-1]))for i in s.split());m=(ord(x[0])+ord(y[0])+3)%10*6;z="6686VW2628AW3555AV0000002666RW0626RV2682AR";return' '.join(str((x[1]**(int(z[m+i*2])-4)*y[1]**(int(z[m+i*2+1])-4))**.5)+z[m+i+4]for i in(0,1))

Ungolfed:

def electric(s):
    x, y = sorted((i[-1],float(i[:-1]))for i in s.split())
    m = (ord(x[0]) + ord(y[0]) + 3) % 10 * 6
    z = "6686VW2628AW3555AV0000002666RW0626RV2682AR"
    h = []
    for i in range(2):
         f = (x[1] ** (int(z[m*6+i*2])-4) * y[1] ** (int(z[m*6+i*2+1])-4)) ** 0.5
         h.append(str(f)+z[m*6+i+4])
    return ' '.join(h)

1

पायथन 3, 193 187 बाइट्स

import re
exec(re.sub('(.+?) (.)',r'\2=\1;',input()))
for s,r in zip('AVRW'*3,'V/R W**.5*R V/A V*V/R W/V W/A V*V/W R*A*A W**.5/R A*R W/A**2 V*A'.split()):
 try:print(eval(r),s,)
 except:0

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

फ़ॉर्म के इनपुट <value> <unit> <value> <unit>को असाइनमेंट स्टेटमेंट में परिवर्तित करता है । फिर, evalप्रत्येक सूत्र का उपयोग करें , try/exceptजिसमें से चर नहीं सौंपा गया है, जिसमें से त्रुटियों की अनदेखी के साथ ।


मैं क्रेडिट की जरूरत नहीं है
dieter
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.