এই তালিকা কি ভারসাম্যযুক্ত হতে পারে?


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]

এই চ্যালেঞ্জটি বালির বাক্সযুক্ত হওয়ার সাথে সম্পর্কিত অনেকগুলি চ্যালেঞ্জ যেখানে পাওয়া গেছে : এটি কি ভারসাম্যযুক্ত সংখ্যা? , একটি ক্রম ভারসাম্যের সূচক , ব্যালেন্স একটি ঢেঁকিকল উপর ওজন একটি সেট , শব্দ ভারসাম্য , আমি উপর টিপ থাকবে? এবং পাইভট কোথা থেকে আসে?


পিভটটি প্রথম সংখ্যার আগে বা শেষ সংখ্যার পরে স্থাপন করা যেতে পারে?
এরিক দি আউটগল্ফার

@ এরিকথ আউটগল্ফার যদি সমস্ত ওজন অনুজাত হয়, না

আমি মনে করি এটি একটি ডুপ হতে পারে। নাকি কিছুক্ষণ স্যান্ডবক্সে বসে ছিল?
শেভি

এর সাথে সম্পর্কিত । (সিসি @ শেগি সম্ভবত আপনি যা ভাবছিলেন
এটিই

2
@ জিউস্পেপ @ স্টেডিবক্স আমি যোগ করেছি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
মিস্টার এক্সকোডার


4

ওল্ফ্রাম ল্যাঙ্গুয়েজ (ম্যাথমেটিকা) , 36 বাইট

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

এটি মূল বিন্দুগুলির একটিতে উত্স সহ একটি সমন্বিত সিস্টেমে ভর সমস্যার কেন্দ্র এবং তারপরে আপনি নির্ধারণ করুন যে মুখ্যমন্ত্রী ল্যাটিক পয়েন্টে পড়ে যেখানে ল্যাটিসের প্রস্থ = 1/2।

এটি অনলাইন চেষ্টা করুন!


4

05 এ বি 1 ই , 6 বাইট

ƶO·IOÖ

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

programO · IOÖ ~ সম্পূর্ণ প্রোগ্রাম। আমি = ইনপুট।

ift ~ উত্তোলন I. প্রতিটি উপাদানকে এর 1-ভিত্তিক সূচক দিয়ে গুণ করুন।
 ও ~ সম
  ~ ~ ডাবল 
     ~ Of এর একাধিক?
   আইও I এর যোগফল।

ব্যর্থ বলে মনে হচ্ছে [1,1](সত্যবাদী হওয়া উচিত)। মনে হয় প্রকৃত দ্বিগুণটি আসলে সেখানে নেই।
Zgarb

@ জাগারব ফিক্সড (?)
মিস্টার এক্সকোডার

2

জেলি , 6 বাইট

×JSḤọS

এটি অনলাইন চেষ্টা করুন!

ঠিক আছে, দেখে মনে হচ্ছে লেকি নুন অর্থহীন।

মেমোনিকের পাইথ পদ্ধতির ব্যবহার।

ইতিবাচক পূর্ণসংখ্যা (সত্যবাদী) বা শূন্য (মিথ্যা) প্রদান করে।


Would এই কাজ করে?
লিকি নুন

না @LeakyNun তাই নিশ্চিত, যে কেন আমি ব্যবহৃত LḶপরিবর্তে (যদিও এটা হবে সব পরীক্ষার বিষয় জন্য সফল)। সম্পাদনা: ওওহ, এখন আমি আবার এটি সম্পর্কে ভাবছি বলে মনে হচ্ছে ... ( b | a ⇔ b | a + b duh)
এরিক দ্য আউটগল্ফার








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 বাইট

মূলত স্তন্যপায়ী সমাধান দ্বারা অনুপ্রাণিত

x* vUx*½

চেষ্টা করে দেখুন

1 3 বাইট ETH প্রডাকশনগুলিতে ধন্যবাদ সংরক্ষণ করেছে।


ব্যাখ্যা

অ্যারের অন্তর্নিহিত ইনপুট U। প্রক্রিয়াতে xপ্রতিটি উপাদানকে 0-ভিত্তিক সূচক ( *) দ্বারা গুণিত করে ( ) দ্বারা হ্রাস করুন । ফলাফলটি vমূল ইনপুট ( Ux) এর যোগফলের সাথে সমানভাবে বিভাজ্য কিনা (যদি ) প্রতিটি উপাদানকে 0.5 ( ) দিয়ে গুণিত করা হয় তবে তা পরীক্ষা করে দেখুন ।


সাথে একটি বাইট সংরক্ষণ করুন m* x*2 vUx। এটি আমাকে m* x*2আরও হ্রাস করা যায় কিনা তা ভাবতে
বাধ্য করে

ধন্যবাদ, @ ইথ প্রডাকশনস; এটিই আজ আমি নতুন একটি কৌশল শিখেছি।
শেগি

আমি এটি পেয়েছি, কেবল ব্যবহার করুন x*এবং এটি দ্বারা বিভাজ্য কিনা তা পরীক্ষা করুন Ux*½:)
ETH প্রোডাকশন

হ্যাঁ, আমি মনে করি না যে কৌশলটি কোথাও নথিভুক্ত করা হয়েছে ... তবে আপনি যখনই কোনও XY{X*Y}
দ্বি

ওহ, এখন, এটি কেবলমাত্র বুদ্ধিমান, @ETH প্রোডাকশনস। :)
শেগি

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

পিএইচপি , 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 বাইট সংরক্ষণ।
মনাসেখ্যাটজ-রিইনস্টেট মনিকা

@ মানাসেখ্যাটজ আপনি যদি টিও.রুনে উদ্ধৃতিবিহীন ডাই ব্যবহার করেন তবে এটি এটিকে স্থিতি কোড হিসাবে বিবেচনা করবে (যা এটি হওয়া উচিত) এবং আউটপুট বিভাগে রাখবে না। তাই আমি লোককে
নিটপিকিং


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.