प्रतिरोध की गणना (बेवकूफ छलनी)


10

गुड आफ्टरनून गोल्फर्स,

आज के लिए हमारी चुनौती एक्सकेसीडी कॉमिक्स 356 और 370 से प्रेरित है । हम प्रतिरोधों के एक समूह के प्रतिरोध की गणना करने के लिए एक कार्यक्रम लिखने जा रहे हैं। एक पूर्वाभास यह है कि यह लगभग एक कोड चुनौती के रूप में वारंट के लिए पर्याप्त कठिन है, हालांकि मुझे लगता है कि एक गोल्फ प्रारूप में थोड़ा और अधिक जटिल कार्यक्रम लिखने की एक निश्चित कला है। सबसे कम राशि वाले किरदार जीतते हैं।

प्रतिरोध की गणना निम्न दो सूत्रों पर निर्भर करती है:

  • यदि प्रतिरोधक श्रृंखला में हैं, तो प्रतिरोध प्रत्येक प्रतिरोधक के प्रतिरोध का योग है
  • यदि प्रतिरोधक समानांतर में हैं, तो प्रतिरोध प्रत्येक प्रतिरोधक के प्रतिरोध के व्युत्क्रम के योग का व्युत्क्रम है

इसलिए - उदाहरण के लिए:

प्रतिरोध की गणना का उदाहरण

आपकी चुनौती है, कम से कम वर्णों में संभव हो, 64 प्रतिरोधों के समूह के प्रतिरोध की गणना करें। जटिलता के लिए मेरी माफी, विशेष रूप से इनपुट नियमों की। मैंने उन्हें इस तरह से परिभाषित करने का प्रयास किया है कि हर भाषा उपयोगी होगी।

  • प्रत्येक रोकनेवाला 2 या अधिक अन्य प्रतिरोधों से जुड़ा होगा।

  • इनपुट केवल एक प्रविष्टि और एक निकास बिंदु के साथ मान्य होने की गारंटी है, जो कनेक्ट करेगा

  • नेटवर्क अधिक गणित की आवश्यकता को रोकने के लिए श्रृंखला-समानांतर होगा फिर जो प्रस्तुत किया गया है

  • इनपुट फ़ाइल, तर्क या स्टड के माध्यम से होगा, जो आपकी भाषा के लिए उपयुक्त है, इस पर निर्भर करता है।

  • इनपुट में न्यूलाइन की एक श्रृंखला शामिल होगी या आगे की ओर झुके हुए अलग-अलग स्टेटमेंट होंगे, जिसमें रेसिस्टर्स के प्रतिरोध का एक पूर्णांक होता है, और रेसिस्टर्स की आईडी को अलग करने वाली जगहें जो रेसिस्टर के एक तरफ से जुड़ी होती हैं।

  • पहले रोकनेवाला की आईडी 1 होगी, जो प्रत्येक क्रमिक अवरोधक के लिए एक-एक करके बढ़ती है

  • शुरुआत में हमेशा 0 की आईडी होगी

  • अंतिम अवरोधक में हमेशा 0 ओम का प्रतिरोध होगा, और केवल इसकी रेखा में परिभाषित कनेक्शन होंगे

उदाहरण के लिए:

उदाहरण 2

के रूप में प्रतिनिधित्व किया जा सकता है

3 0
6 1
1 0
5 0
0 2 3 4
  • आउटपुट स्टडआउट या फ़ाइल के लिए हो सकता है। इसे निम्न तरीकों में से एक में दर्शाया जा सकता है:
    • न्यूनतम 2 दशमलव स्थानों वाली एक संख्या, जिसके बाद एक नई रेखा होती है
    • पूर्णांक (अंश), आगे स्लैश और अन्य पूर्णांक (हर) से मिलकर एक अंश, उसके बाद एक नई रेखा। अंश को अपने निम्नतम रूप में होने की आवश्यकता नहीं है - उदाहरण के लिए 4/4 या 10/8 हैं। अंश 1/100 के भीतर सटीक होना चाहिए। पूरी तरह से सटीक होने के लिए कोई बोनस नहीं है - यह प्रदान किया जाता है कि प्रतिस्पर्धा के बिना फिक्स्ड या फ्लोटिंग पॉइंट ऑपरेशन के बिना भाषाओं को सक्षम करने के लिए एक बैसाखी है।

मुझे उम्मीद है कि सभी बिंदुओं को शामिल किया गया है। सौभाग्य!


/बैकस्लैश नहीं है। क्या आपका मतलब `` `या फॉरवर्ड स्लैश है?
जॉन ड्वोरक

यदि इनपुट श्रृंखला-समानांतर नेटवर्क नहीं है, तो क्या हमें गलत परिणाम देने की अनुमति है?
जॉन ड्वोरक

1
व्हीटस्टोन ब्रिज श्रृंखला समानांतर यदि आप एक बाधा के साथ केंद्र वाल्टमीटर की जगह नहीं है
जॉन ड्वोरक

1
क्या रेसिस्टर्स हमेशा कम आईडी वाले लोगों को तार देते हैं या वे किसी भी क्रम में इनपुट हो सकते हैं? है 1 2/1 0/0 1मान्य है?
जॉन ड्वोरक

9
समानांतर उदाहरण गलत है। यह 15/23 होना चाहिए, न कि 15/8।
पीटर टेलर

जवाबों:


6

एपीएल 190

सूचकांक उत्पत्ति 1. पहला लूप (s) श्रृंखला में वायर्ड सभी प्रतिरोधों को जोड़ता है, दूसरा (पी) जो समानांतर में वायर्ड हैं और पहले लूप में किसी भी समानांतर रेसिस्टर्स को अब श्रृंखला में संयोजित करने के लिए दोहराते हैं। अंतिम शून्य रोकनेवाला का विनिर्देश निरर्थक प्रतीत होता है।

r←¯1↓⍎¨(c≠'/')⊂c        
o←⊃↑¨r                  
r←⊃1↓¨r                 
s:→(0=+/n←1=+/×r)/p     
n←↑n/i←⍳↑⍴r             
o[n-1]←+/o[n-0 1]       
o←(i←n≠i)/o             
r←i⌿r                   
r←r-r≥n                 
→s                      
p:n←1⍪2≠/r[;1]          
r←((⍴r),1)⍴r←¯1++\n~0   
o←∊1÷¨+/¨1÷¨n⎕penclose o
→(1<⍴o)/s               
3⍕o                     
' '  

प्रश्न में उदाहरणों पर परीक्षण किया गया और थोड़ा अधिक जटिल है:

      Input: '5 0/3 1/1 2/0 2'
 9.000

      Input: '3 0/1 0/5 0/0 1 2 3'
 0.652

      Input: '3 0/6 1/1 0/5 0/0 2 3 4'
 0.763

      Input: '2 0/2 1/2 0/2 0/2 4/2 5/2 2 3 6/2 7/2 2 3 6/0 8 9'
 2.424

हमेशा एपीएल जवाबों से चकित - वे बिल्कुल पागल दिखते हैं। अंतिम अवरोधक सिर्फ दूसरे प्रतिरोधों को जोड़ने के लिए कुछ देना था - एक डमी अंत लिंक। बहुत बढ़िया!
lochok

मुझे लगता है कि आप कुछ पात्रों को बचा सकते हैं। पहले दो पंक्तियों को बदलें o←⊃↑¨r←¯1↓⍎¨(c≠'/')⊂c। यह पैटर्न कुछ स्थानों पर लागू है।
फ़ूजएक्सएक्सएल

5

पायथन, 329 वर्ण

import sys
N=[[1]]+[map(int,x.split())for x in sys.stdin]
N[-1][0]=1
n=len(N)
S=[set([i])for i in range(2*n)]
for x in range(n):
 C=S[2*x]
 for y in N[x][1:]:C|=S[2*y+1]
 for x in C:S[x]|=C
V=[0]*(2*n-1)+[1]
for k in range(999):
 for i in range(1,2*n-1):V[i]+=sum((V[j^1]-V[i])/N[j/2][0]for j in S[i])/9./len(S[i])
print 1/V[1]-2

सर्किट पर वोल्टेज विश्राम करके प्रतिरोध की गणना करता है। पहले यह एक 1 ओम रोकनेवाला पर शुरू होता है और अंतिम अवरोधक को 0 ओम से 1 ओम तक बदलता है। फिर यह इनपुट वोल्टेज को 0 और आउटपुट वोल्टेज को 1 वोल्ट पर सेट करता है। नेटवर्क के माध्यम से वर्तमान प्रवाह का अनुकरण करने के बाद, नेटवर्क प्रतिरोध की गणना पहले 1 ओम अवरोधक पर वोल्टेज ड्रॉप का उपयोग करके की जाती है।

प्रत्येक रोकनेवाला को दो नंबर दिए जाते हैं, उसके बाएं टर्मिनल के लिए नंबर और उसके दाहिने टर्मिनल के लिए नंबर। रेसिस्टर का लेफ्ट टर्मिनल 2 * r है और इसका राइट टर्मिनल 2 * r + 1 है। इनपुट का उपयोग गणना करने के लिए किया जाता है S, टर्मिनलों के सेट जो एक साथ जुड़े होते हैं। प्रत्येक टर्मिनल को एक वोल्टेज दिया जाता है V[t]और वोल्टेज को बढ़ाकर एक छूट दी जाती है यदि वर्तमान में एक टर्मिनल सेट में शुद्ध प्रवाह होता है और यदि वर्तमान में शुद्ध प्रवाह होता है तो वोल्टेज कम होता है।


2

(यह एक टिप्पणी है, लेकिन मैं एक वास्तविक टिप्पणी में आस्की कला नहीं कर सकता ...)

इस तरह का कुछ इनपुट कैसे है?

    --1--     --3--
   /     \   /     \
---       ---       --0--
   \     /   \     /
    --2--     --4--

विशेष रूप से, 3 और 4 किससे जुड़े हैं? 1 या 2, या दोनों 1 और 2?


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