क्या सर्किट संभव है?


9

एक प्रोग्राम या फ़ंक्शन लिखें जो इनपुट लेता है: सभी रेसिस्टर्स उपलब्ध हैं और एक प्रतिरोध मूल्य है और उन प्रतिरोधों का उपयोग करके प्रतिरोध प्राप्त करना संभव है या नहीं, के एक सत्य मूल्य को आउटपुट करता है।

नियम:

इनपुट के लिए कोई भी प्रारूप करेगा।

कम से कम 1 उपलब्ध रोकनेवाला होगा और आपके कार्यक्रम को कम से कम 10 उपलब्ध प्रतिरोधों के लिए आउटपुट देना चाहिए।

सभी उपलब्ध प्रतिरोधों का प्रतिरोध और आवश्यक प्रतिरोध सकारात्मक पूर्णांक होंगे।

उपलब्ध प्रतिरोधों के लिए यदि एक भिन्नात्मक मूल्य भी संभव है, तो आवश्यक प्रतिरोध अनुमानित मान हो सकता है। (उदाहरण देखें)

आउटपुट संभव और संभव नहीं के लिए कोई 2 अद्वितीय मान होना चाहिए।

प्रतिरोधक किसी भी तरीके से जुड़े हो सकते हैं।

श्रृंखला प्रतिरोध: श्रृंखला में n प्रतिरोधों के लिए: परिणाम = R1 + R2 + R3 + .... Rn

समानांतर प्रतिरोध: समानांतर में n प्रतिरोधों के लिए: परिणाम = 1 / (1 / R1 + 1 / R2 + 1 / R3 + .... + 1 / Rn)

सर्किट को आवश्यक प्रतिरोध प्राप्त करने के लिए सभी प्रतिरोधों की आवश्यकता नहीं हो सकती है (यदि ऐसा है तो आउटपुट सही है)।

विजेता:

यह कोड-गोल्फ है इसलिए सबसे कम-कोड जीतता है।

उदाहरण:

R     List
110   220,220 -> True
440   220,220 -> True
550   400,300 -> False
3000  1000,3000 -> True
750   1000,3000 -> True
333   1000,1000,1000 -> True (1000||1000||1000=333.333)
667   1000,1000,1000 -> True ((1000+1000)||1000=666.6666)
8000  1000,1000,7000 -> True 
190   100,200,333,344,221 -> True 
193   105,200,333,344,221 -> True
400   200,100 -> False

अंतिम दो उदाहरणों के लिए स्पष्टीकरण: /physics/22252/resistor-circuit-that-isnt-parallel-or-series


क्या मुक्केबाज़ी 3 3 1, 3 3 2?
l4m2

1.5 को 2 के लिए गोल किया गया है, आवश्यक प्रतिरोध 0 नहीं दिया जाएगा (इसे प्रश्न में जोड़ा गया), 3 3 सही होगा
वेदांत कंडोई

अच्छी चुनौती है, लेकिन मैं ईई के साथ पर्याप्त सौदा कर रहा हूं ...

मुझे लगता है कि Machematica जीत?
l4m2

2
विवरण की तुलना में यह समस्या अधिक कठिन है क्योंकि यह सामान्य प्रतिरोधक सर्किट को पिछले दो परीक्षण मामलों की तुलना में अधिक जटिल तरीकों से श्रृंखला और समानांतर भागों में पुनरावृत्ति से नहीं तोड़ा जा सकता है। ऐसे उदाहरण बनाने के लिए 10 प्रतिरोधों को आसानी से पर्याप्त होना चाहिए। मुझे संदेह है कि वर्तमान में पोस्ट किए गए उत्तरों में से कोई भी सामान्य रूप से काम नहीं करता है, और एक सही उत्तर के लिए किसी न किसी रूप में मैट्रिक्स का उलटा होना आवश्यक है।
xnor

जवाबों:


1

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

import functools
def p(l): return functools.reduce(lambda z,x:z+[y+[x]for y in z],l,[[]])
print(l[-1:][0]in[round(a)for a in[sum(a)for a in p([sum(a)for a in p(l)]+[1/sum(c)for c in[[1/b for b in a if b!=0]for a in p(l).copy()]if sum(c)!=0])]])

मैं सभी अवरोधक मानों की शक्तियां लेता हूं और फिर पार्ले के लिए श्रृंखला और 1 / योग (1 / मान) के लिए रकम की गणना करता हूं और फिर मैं इन दो सेटों की एक शक्तियां लेता हूं। जब आप सभी सबसेट का योग लेते हैं और उन्हें एक सेट में रखते हैं तो इस सेट ईटर में मान होता है या नहीं। -> सच्चा / झूठा लौटा

@stephen धन्यवाद :)


2
PPCG में आपका स्वागत है! यदि आपको किसी आयात की आवश्यकता है, तो उन्हें आपके कोड में शामिल किया जाना चाहिए। इसके अतिरिक्त, आपको इनपुट को एक चर में मानने के बजाय, स्वयं इनपुट लेने की आवश्यकता है। इसके अलावा, b != 0-> b!=0
स्टीफन

स्टीफन सरोद के रूप में, आप पूर्व-परिभाषित चर के माध्यम से इनपुट नहीं ले सकते, अन्यथा यह एक स्निपेट है, जिसकी अनुमति नहीं है। आपको इसे किसी फ़ंक्शन, या पूर्ण प्रोग्राम में बदलना चाहिए
Jo King

1
यह तीसरे परीक्षण के मामले के लिए काम नहीं करता है (साथ ही, थोड़ा सा और उचित इनपुट के साथ। यदि आप चिंतित हैं कि मैंने कुछ तोड़ा है, तो आपका मूल कोड भी काम नहीं करता है)
Jo King

dammit। बीमार पर एक नज़र है :(
सिमोनशूलर

1

जाप , 52 बाइट्स

à má

ÈÊ<2?X:X¯1 ïXÅgW @[X+Y1/(1/XÄ/Y]Ãc
mmW c mr øV

कोशिश करो!

यह एक कठिन था, और मुझे इसे काम करने के लिए कुछ अजीब चीजें करनी थीं। मैं गणितीय रूप से यह साबित नहीं कर सकता कि यह सब कुछ के लिए काम करता है, लेकिन यह सभी परीक्षण मामलों के साथ-साथ मेरे अतिरिक्त प्रस्तावित परीक्षण मामले के लिए भी काम करता है । विशेष रूप से, मुझे पता है कि मैं जिस फ़ंक्शन को परिभाषित करता हूं Wवह इसके इनपुट में प्रतिरोधों के क्रम के आधार पर अलग-अलग परिणाम देता है इसलिए मैं इसे प्रतिरोधों के प्रत्येक संभव संयोजन के प्रत्येक संभव आदेश पर चलाता हूं। मुझे यह भी पता है कि यह उन प्रतिरोधों की एक सूची तैयार करेगा जो इनपुट प्रतिरोधों का उपयोग करके बनाने के लिए सभी संभव हैं। मैं 100% निश्चितता के साथ नहीं जानता कि वे दो चीजें मिलकर हर संभव प्रतिरोध को समाप्त करती हैं।

स्पष्टीकरण:

à       Get each combination e.g. [1,2,3] -> [[1,2,3],[1,2],[1,3],[2,3],[1],[2],[3]]
  m     For each combination...
   á    Get each order e.g. [1,2,3] -> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

    Skip a line to avoid overwriting the target resistance

È                                     Define a function W taking an array input X:
 Ê<2?X                                  If X is only 1 resistor, return it as-is
            XÅgW                        Get the resistances from applying W to the tail of X
       X¯1 ï                            Pair the first resistor with each possible tail resistance
                 @[            ]Ã       For each pair get these two values:
                   X+Y                    Those resistances in series
                      1/(1/XÄ/Y           Those resistances in parallel
                                 c      Collapse all those resistances into a single flat list

mmW            For each combination and order, get the resistances using W
    c          Collapse to a single list of resistances
      mr       Round each one
         øV    Return true if the target resistance is in the list, false otherwise

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