क्या इस सूची को संतुलित किया जा सकता है?


23

यह देखने के लिए कि क्या गैर-ऋणात्मक पूर्णांकों की सूची संतुलित है , कोई भी बोर्ड पर संबंधित भार डालने की कल्पना कर सकता है और फिर बोर्ड को एक धुरी पर संतुलित करने का प्रयास कर सकता है जैसे कि धुरी के बाएं और दाएं के सापेक्ष वजन समान हैं। रिश्तेदार का वजन उसकी दूरी के साथ धुरी से गुणा करके दिया जाता है ( लीवर का नियम देखें )।

विकिपीडिया लीवर (स्रोत: विकिपीडिया )

यह छवि एक सूची से मेल खाती है [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]। यह सूची संतुलित है क्योंकि 5इसमें धुरी पर 20 की 100दूरी, 1 की दूरी और है 5*20 = 100 = 100*1

उदाहरण

 3 1 5 7
#########
     ^

इस मामले में धुरी के तहत सीधे है 5, 3दूरी 2 है और 1और 7तो दोनों पक्षों को छोड़ दिया और धुरी राशि का सही अप करने के लिए दूरी 1. है 7( 3*2 + 1*1बाईं तरफ और 7*1पर सही) और इसलिए सूची [3, 1, 5, 7]संतुलित किया जाता है।

हालाँकि, ध्यान दें कि पिवट को सूची तत्वों में से किसी एक के तहत नहीं रखा जाना चाहिए, लेकिन इन दोनों के बीच में भी रखा जा सकता है:

 6 3 1
#######
  ^

इस मामले में दूरियां बन जाती हैं 0.5, 1.5, 2.5, ...। यह सूची भी क्योंकि संतुलित किया जाता है 6*0.5 = 3 = 3*0.5 + 1*1.5

धुरी को केवल एक संख्या के ठीक नीचे या ठीक दो नंबरों के बीच में रखा जा सकता है, और जैसे कि दो नंबरों के बीच दो-तिहाई पर नहीं

कार्य

किसी भी उचित प्रारूप में गैर-नकारात्मक पूर्णांकों की सूची को देखते हुए, एक truthyमूल्य का उत्पादन करें यदि सूची को संतुलित किया जा सकता है और falsyअन्यथा एक मूल्य हो सकता है।

आप मान सकते हैं कि इनपुट सूची में कम से कम दो तत्व हैं और कम से कम एक तत्व गैर-शून्य है।

यह एक चुनौती है, इसलिए प्रत्येक भाषा में सबसे कम बाइट्स का जवाब जीत जाता है।

ट्रू टेस्टीसेस

[1, 0]
[3, 1, 5, 7]
[6, 3, 1]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
[10, 4, 3, 0, 2, 0, 5]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[7, 7, 7, 7]

मिथ्या वृषण

[1, 2]
[3, 6, 5, 1, 12]
[0, 0, 2, 0, 1, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[6, 3, 2, 4, 0, 1, 2, 3]
[4, 0, 0, 2, 3, 5, 2, 0, 1, 2, 3, 0, 0, 1, 2, 4, 3, 1, 3, 0, 0, 2]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]

संबंधित बहुत सी चुनौतियाँ जहाँ यह चुनौती थी, वह रेत-बॉक्सिंग थी : क्या यह एक संतुलित संख्या है? , एक दृश्य के संतुलन सूचकांक , शेष एक झूला पर वजन का एक सेट , शब्द संतुलन , मैं टिप होगा? और धुरी कहाँ है?


क्या धुरी को पहले नंबर से पहले रखा जा सकता है या आखिरी नंबर के बाद?
एरिक आउटफेलर

@EriktheOutgolfer यदि सभी वज़न नॉनगेटिव हैं, तो नहीं।

मुझे लगता है कि यह एक धोखा हो सकता है। या यह कुछ समय के लिए सैंडबॉक्स में बैठा था?
झबरा

संबंधित । (cc @Shaggy शायद आप यही सोच रहे थे)
श्री एक्सकोडर

2
@Giuseppe @Steadybox मैंने जोड़ाYou can assume that the input list contains at least two elements and that at least one element is non-zero.
लाकोनी

जवाबों:


7

पायथ, 12 10 बाइट्स

!%ys*VQUQs

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

श्री एक्सकोडर और एरिक आउटगोलेर के लिए धन्यवाद 2 बाइट्स सहेजे गए।

व्याख्या

!%ys*VQUQs
    *VQUQ    Multiply each input by its index.
  ys         Take twice the sum (to handle half-integer positions).
!%       sQ  Check if that's a multiple of the total weight.

आप yजगह ले सकते हैं*2
श्री एक्सकोडर

10 बाइट्स:!%ys*VQUQs
एरिक आउटफोलर

4

वोल्फ्राम भाषा (गणितज्ञ) , 36 बाइट्स

IntegerQ[2#.Range[t=Tr[1^#]]/(t-1)]&

यह एक बिंदु पर उत्पत्ति के साथ एक समन्वय प्रणाली में बड़े पैमाने पर समस्या का केंद्र है और फिर आप यह निर्धारित करते हैं कि क्या सीएम एक जाली बिंदु पर गिरता है जहां जाली चौड़ाई = 1/2 है।

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


4

05AB1E , 6 बाइट्स

ƶO·IOÖ

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

कैसे?

ƶO · IOÖ ~ पूर्ण कार्यक्रम। म = इनपुट।

ƶ ~ लिफ्ट I प्रत्येक तत्व को उसके 1-आधारित सूचकांक के साथ गुणा करें।
 ओ ~ सुम।
  · ~ डबल। 
     Ö ~ की एक बहु है?
   IO ~ I का योग।

पर विफल होने लगता है [1,1](सत्य होना चाहिए)। ऐसा लगता है कि निहित दोहरीकरण वास्तव में नहीं है।
ज़गरब

@Zgarb फिक्स्ड (?)
मिस्टर एक्सकोडर

2

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

×JSḤọS

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

खैर, लगता है कि लीक नन ने नुकीले को इंगित किया।

Mnemonic के Pyth दृष्टिकोण का उपयोग करना।

एक सकारात्मक पूर्णांक (सत्य) या शून्य (मिथ्या) लौटाता है।


क्या यह काम करेगा?
लीक नन

@LeakyNun इतना निश्चित नहीं है, इसीलिए मैंने इसका उपयोग LḶकिया (हालाँकि यह सभी परीक्षण मामलों के लिए सफल होगा )। संपादित करें: ओहो, अब जब मैं इसके बारे में फिर से सोचता हूं, तो ऐसा लगता है ... ( b | a | b। A + b duh)
Eg the Outgolfer


2

जाप , 10 बाइट्स

í* x*2 vUx

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

स्पष्टीकरण:

 í* x*2 vUx
U            // Implicit Input                 [3, 1, 5, 7]
 í           // Pair the input with its index  [[3,0],[1,1],[5,2],[7,3]]
  *          // Multiply each item             [0,1,10,21]
    x        // Sum                            32
     *2      // Double                         64
        v    // Divisible by:
         Ux  //   Sum of Input                 16
             // Explicit Output                1

रिटर्न 1truthy के लिए, 0falsy के लिए।







1

पर्ल 6 , 23 बाइट्स

{sum(1..*Z*$_)*2%%.sum}

झसे आज़माओ

विभिन्न अन्य प्रविष्टियों से एल्गोरिथ्म का उपयोग करता है।

विस्तारित:

{  # bare block lambda with implicit parameter 「$_」

    sum(

        1 .. *  # Range starting from 1

      Z*        # Zip using &infix:«*»

        $_      # the input

    ) * 2

  %%            # is divisible by

    .sum        # the sum of the input (implicit method call on 「$_」)
}

1

जाप, 11 10 8 बाइट्स

मूल रूप से Mnemonic के समाधान से प्रेरित

x* vUx*½

कोशिश करो

1 3 बाइट्स ETHproductions के लिए धन्यवाद बचा लिया।


व्याख्या

सरणी का निहित इनपुट U। इसके अलावा घटाना ( x), प्रत्येक तत्व को उसके 0-आधारित इंडेक्स ( *) द्वारा प्रक्रिया में गुणा करना । जांचें कि क्या परिणाम vमूल रूप से विभाज्य है ( ) मूल इनपुट के योग से ( Ux) प्रत्येक तत्व को 0.5 से गुणा किया गया है ( )।


एक बाइट के साथ सहेजें m* x*2 vUx। इससे मुझे आश्चर्य होता है कि क्या m* x*2इसे और कम किया जा सकता है ...
ETHproductions

धन्यवाद, @ETHproductions; आज मैंने एक और नई तरकीब सीखी है।
झबरा

मुझे यह मिल गया है, बस उपयोग करें x*और जांचें कि क्या यह विभाज्य है Ux*½:)
ETHproductions

हां, मुझे नहीं लगता है कि ट्रिक कहीं भी प्रलेखित है ... लेकिन जब भी आप द्विआधारी ऑपरेटर को ऑटो-फ़ंक्शन के रूप में बिना किसी दूसरे तर्क के साथ उपयोग करते हैं, तो यह इंडेक्स को डिफ़ॉल्ट रूप से उपयोग करता है (जैसे कि आपने किया XY{X*Y})
ETHproductions

ओह, अब, यह केवल सरल है, @ETHproductions। :)
झबरा

1

सी # , 71 बाइट्स


golfed

a=>{int i,s,S=s=i=0;while(i<a.Length){S-=s;s-=a[i++];}return 2*S%s<1;};

Ungolfed

a => {
    int
        i, s, S = s = i = 0;

    while( i < a.Length ) {
        S -= s;
        s -= a[ i++ ];
    }

    return 2 * S % s < 1;
};

पूर्ण कोड

using System;

namespace Namespace {
    class Program {
        static void Main( String[] args ) {
            Func<Int32[], Boolean> f = a => {
                int
                    i, s, S = s = i = 0;

                while( i < a.Length ) {
                    S -= s;
                    s -= a[ i++ ];
                }

                return 2 * S % s < 1;
            };

            List<Int32[]>
                testCases = new List<Int32[]>() {
                    new Int32[] {1, 0},
                    new Int32[] {3, 1, 5, 7},
                    new Int32[] {6, 3, 1},
                    new Int32[] {100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5},
                    new Int32[] {10, 4, 3, 0, 2, 0, 5},
                    new Int32[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
                    new Int32[] {7, 7, 7, 7},

                    new Int32[] {1, 2},
                    new Int32[] {3, 6, 5, 1, 12},
                    new Int32[] {0, 0, 2, 0, 1, 0},
                    new Int32[] {1, 2, 3, 4, 5, 6, 7, 8, 9},
                    new Int32[] {6, 3, 2, 4, 0, 1, 2, 3},
                    new Int32[] {4, 0, 0, 2, 3, 5, 2, 0, 1, 2, 3, 0, 0, 1, 2, 4, 3, 1, 3, 0, 0, 2},
                    new Int32[] {100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5},
                };

            foreach( Int32[] testCase in testCases ) {
                Console.WriteLine( $"{{ {String.Join(", ", testCase)} }}\n{f( testCase )}" );
            }

            Console.ReadLine();
        }
    }
}

विज्ञप्ति

  • v1.0 - 71 bytes- प्रारंभिक समाधान।

टिप्पणियाँ

मैं हो सकता है, या हो सकता है, धृष्टता से "उधार" डेनिस अजगर 2 समाधान नहीं है ...




0

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

-3 बाइट्स के लिए मिस्टर एक्सकोडर का धन्यवाद

lambda l:0in[sum(v*(i-y*2)for y,v in enumerate(l))for i in range(len(l)*2)]

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


2
में अंतरिक्ष के लिए कोई ज़रूरत नहीं है 0 in। इसके अलावा कोई के लिए की जरूरत 0में range(0,len(l)*2)..
श्री Xcoder


0

PHP , 139 128 बाइट्स

<?php $a=explode(',',fgets(STDIN));for($i=0;$i<count($a)-.5;$i+=.5){$z=0;foreach($a as $k=>$v)$z+=($k-$i)*$v;if($z==0)die(1);}?>

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


1
जब तक मैं गलत इस [ codegolf.meta.stackexchange.com/questions/2447/... आप उपयोग करने में सक्षम होना चाहिए die(1)और die(0)और बाहर निकलें कोड के बजाय एक मुद्रित स्ट्रिंग का उपयोग करके 4 बाइट बचाने।
मनश्शेख्जत-पुनः मोनिका

@manassehkatz यदि आप tio.run पर उद्धरण के बिना डाई का उपयोग करते हैं, तो इसे इसे एक स्टेटस कोड (जो इसे चाहिए) के रूप में माना जाएगा और इसे आउटपुट सेक्शन में नहीं डालना चाहिए। इसलिए मैंने सिर्फ लोगों को
नाइटपैकिंग


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