শূন্য-সমষ্টি গণনা


25

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা n ≥ 1 প্রদত্ত সমাধানের সংখ্যাটি ± 1 ± 2 ± 3 ± ... ± n = 0 এ দেয়।

এন = 6 এর জন্য কোনও সমাধান নেই, সুতরাং উত্তরটি 0 হয় n এন = 4 এর জন্য দুটি সমাধান রয়েছে, সুতরাং উত্তরটি 2 (দুটি সমাধান 1 - 2 - 3 + 4 = -1 + 2 + 3 - 4 = 0)।

এই OEIS ক্রম A063865 । কিছু উদাহরণ ইনপুট / আউটপাস হ'ল:

n       a(n)
1       0
2       0
3       2
4       2
5       0
6       0
7       8
8       14
9       0
10      0
11      70
12      124
13      0
14      0
15      722
16      1314

বাইটস মধ্যে সংক্ষিপ্ত কোড।



1
@ মনিষকুন্ডু এইচএম, আমি বলব যে এটি আমার কাছে সম্ভাব্য দ্বিগুণ লক্ষ্যের মতো দেখতে বেশ ভাল লাগে, কেবল শেষে "দৈর্ঘ্য" বা "ফিল্টার বাই সমান সমান" এর পরিবর্তে "সমষ্টি প্রতিটি তারপর গণনা করুন" এর উত্তর দেওয়ার জন্য ।
এরিক আউটগল্ফার

2
@ এরিকথ আউটগল্ফার আমি সেই চ্যালেঞ্জ সম্পর্কে অবগত ছিলাম না, তবে এর উত্তর যথেষ্ট আলাদা হতে পারে, উদাহরণ হিসাবে আমার দেখুন।
orlp

2
@ মনিষকুন্ডু আমি কেবল ব্যাখ্যা করেছি যে কীভাবে এই চ্যালেঞ্জটি আলাদা ...
orlp

2
হ্যাঁ, আমি এটি দেখেছি। দুর্ভাগ্যজনক হলেও আপনি দুর্ঘটনাক্রমে আপনার নিজের প্রশ্নকে আঘাত করেছেন, তবে আপনি যে মতবিরোধ করেন তাতে ভোট দিতে বাধ্য হবেন না।
ডেনিস

উত্তর:





6

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

X®‚sã€ƶO_O

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

ব্যাখ্যা

X®‚          # push [1,-1]
   sã        # cartesian product with input
     €ƶ      # multiply each element in each list with its 1-based index
       O     # sum each list
        _    # logical negation of each sum
         O   # sum

1
+1 এর জন্য O_O...
ফল এশোলং ফল

কোড .. এটা আমার দিকে তাকিয়ে আছে। আমি কি করব?
23 শে 23 এ 23

5

সি (জিসিসি), 45 62 52 50 বাইট

f(n,r){n=n?f(n-1,r+n)+f(n-1,r-n):!r;}F(n){f(n,0);}

কেভিন ক্রুইজসেনের জাভা 8 উত্তরটি বন্দর ।

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

নোট করুন যে মন্তব্যে প্রস্তাবিত উন্নতির কারণে কোডটি ঝাঁকুনির সাথে সংকলিত হওয়ার সময় কাজ না করার পয়েন্টে অপরিবর্তিত আচরণ তৈরি করে।

3 বাইট গল্ফ করার জন্য ইটেনকে ধন্যবাদ । 10 টি বাইট গল্ফ করার জন্য কেভিন ক্রুইজসেনকে ধন্যবাদ । ক্রিস্টফকে আরও 2 বাইট গল্ফ করার জন্য ধন্যবাদ ।

অবরুদ্ধ সংস্করণ:

f(n, r) { // recursive function - return type and parameter type are omitted, they default to int
    n = // instead of returning, we set n - dirty trick
        n ? // if n is not 0, recurse
        f(n-1,r+n) // +n
       +f(n-1,r-n) // -n
        !r; // else if r != 0 return 0 else return 1
}
F(n) { // function to start the recursion; again implicitly int(int)
    n = f(n, 0); // call the recursive function; this time we simply don't return
}

1
আপনি প্রতিস্থাপন 3 বাইট বন্ধ শেভ পারে r?0:1সঙ্গে !r42 বাইট
Etene

2
দেখে মনে হচ্ছে আপনি প্রাথমিক মান সেট করতে এখানে অতিরিক্ত ইনপুট নিচ্ছেন r, যার অনুমতি নেই।
শেগি

1
ভাল মত স্পট, ধন্যবাদ!
ওবালেন্স

2
ভাল @KevinCruijssen এখনো দ্বিতীয় n=প্রয়োজনীয় পারেন নয়: f(n,r){n=n?f(n-1,r+n)+f(n-1,r-n):!r;}F(n){f(n,0);}
ক্রিস্টোফ

2
@ ওউবালেন্স ট্রিকটি দু'জনের পরিপূরক । এর অর্থ এটি -x = ~x+1এবং তাই ~x = -x-1
ক্রিস্টোফ

5

05 এ বি 1 ই , 9 8 বাইট

বাইট সংরক্ষণের জন্য এমিগিনার ধন্যবাদ !

কোড:

LæO·sLO¢

05AB1E এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

L           # Create the list [1, 2, .., input]
 æ          # Compute the powerset of this list
  O         # Sum each list
   ·        # Double each element
    sLO     # Compute the sum of [1, 2, .., input]
       ¢    # Count the number of occurrences

4

এমএটিএল , ১৪ 13 বাইট

[la]Z^G:!Y*~s

ধন্যবাদ 1 জ্যোপ্পিকে 1 বাইট সংরক্ষণ জন্য !

এটি অনলাইন চেষ্টা করুন!বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

n = 3উদাহরণ হিসাবে বিবেচনা করুন । স্ট্যাকটি উল্টোদিকে দেখানো হয়েছে, এটি নীচে সবচেয়ে নতুন প্রদর্শিত হবে।

[la]   % Push array [1 -1]
       % STACK: [1 -1]
Z^     % Cartesian power with inplicit input n
       % STACK: [ 1  1  1
                  1  1 -1
                  1 -1  1
                  1 -1 -1
                 -1  1  1
                 -1  1 -1
                 -1 -1  1
                 -1 -1 -1]
G:     % Push n, range: gives [1 2 ... n]
       % STACK: [ 1  1  1
                  1  1 -1
                  1 -1  1
                  1 -1 -1
                 -1  1  1
                 -1  1 -1
                 -1 -1  1
                 -1 -1 -1],
                 [1  2  3]
!      % Transpose
       % STACK: [ 1  1  1
                  1  1 -1
                  1 -1  1
                  1 -1 -1
                 -1  1  1
                 -1  1 -1
                 -1 -1  1
                 -1 -1 -1],
                 [1
                  2
                  3]
Y*     % Matrix multiplication
       % STACK: [6
                 0
                 2
                -4
                 4
                -2
                 0
                -6]
~      % Logical negation
       % STACK: [0
                 1
                 0
                 0
                 0
                 0
                 1
                 0]
s      % Sum of vector. Implicit display
       % STACK: 2


3

পাইথন 2, 74 বাইট

def f(n):l=k=1;exec"l+=l<<n*k;k+=1;"*n;return(l>>n*n*-~n/4)%2**n*(~-n%4>1)

আরও একটি মজাদার জমা, প্রত্যক্ষ উত্পন্ন ফাংশন গণনা।


3

অক্টাভ (যোগাযোগ প্যাকেজ সহ), 39 বাইট

@(n)sum((2*de2bi(0:2^n-1)-1)*(1:n)'==0)

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

ব্যাখ্যা:

0 ... n ^ 2-1 ব্যাপ্তি নিন এবং এটি বাইনারি রূপান্তর করুন। এটি 0 এবং 1 এর সমস্ত সংমিশ্রণ সহ একটি ম্যাট্রিক্স দেয় । 2 দ্বারা গুণিত করুন এবং 1 -1 এবং +1 এর সমস্ত সংমিশ্রণ সহ একটি ম্যাট্রিক্স পেতে 1 বিয়োগ করুন

সমস্ত সংমিশ্রণ পেতে 1 ... এন ব্যাপ্তির সাথে ডট-পণ্যটি নিন ± 1 ± 2 ... ± এন । শূন্য কত তা গণনা করুন।

মূলত একই জিনিস, একই বাইট গণনা:

@(n)nnz(~((2*de2bi(0:2^n-1)-1)*(1:n)'))


3

পাইথন 2 এবং 3, 50 বাইট

বেশিরভাগ উত্তরের মতো পুনরাবৃত্তির পদ্ধতির:

f=lambda n,r=0:f(n-1,r+n)+f(n-1,r-n)if n else r==0

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

ডাবল রিকার্সিভ কলটি খুব বেশি বাইট নেয় ... সম্ভবত এটি সহজ করার উপায় আছে।


3

জাভা 8, 72 71 70 বাইট

n->f(0,n)int f(int r,int n){return n>0?f(r+n,--n)+f(r+~n,n):r==0?1:0;}

@ আর্নল্ডের জাভাস্ক্রিপ্ট (ES6) এর উত্তর পোর্ট ।
-২ বাইট @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ ।

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

ব্যাখ্যা:

n->                 // Method with integer parameter and integer return-type
  f(0,n)            //  Call the recursive method with 0 and this parameter

int f(int r,int n){ // Recursive method with integer as both two parameters and return-type
  return n>0?       //  If `n` is not 0 yet:
    f(r+n,--n)      //   Recursive call with `r+n` (and `n` lowered by 1 first with `--n`)
    +f(r+~n,n)      //   + Recursive call with `r-n` (and `n` also lowered by 1)
   :r==0?           //  Else-if `r` is 0
     1              //   Return 1
    :               //  Else:
     0;}            //   Return 0

3

হাস্কেল , 55 বাইট

এই সমস্ত অঙ্কগুলি গণনা করা এবং কতটি শূন্য তা যাচাই করার একটি সহজ পদ্ধতি।

f 0=[0]
f n=[(n+),(n-)]>>=(<$>f(n-1))
g x=sum[1|0<-f x]

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

সম্পাদনা করুন: @ এইচ.পি.উইজের একটি সংক্ষিপ্ত এবং উপায়টি ব্যবহার করে আরও মার্জিত সমাধান রয়েছে mapM!


3

বাশ + জিএনইউ ইউটিলিটিস, 63 বাইট

বাশ সম্ভবত পুনরাবৃত্ত ফাংশনগুলির সাথে এর চেয়ে আরও ভাল করতে পারে তবে আমি এই ধরণের eval/ পলায়ন / সম্প্রসারণ মনস্তাদকে প্রতিহত করতে পারি না :

p=eval\ printf\ %s
$p\\\\n \$[$($p \\\{+,-}{1..$1})]|grep -c ^0

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


আপডেট: আমার মনে হয় না পুনরাবৃত্ত ফাংশনগুলির সাথে বাশ আরও ভাল করতে পারে। 90 এর স্কোরের জন্য এটিই আমি সেরাevalজাহান্নাম এটা হয়।



2

অক্টাভা , 42 বাইট

@(n)sum((dec2bin(0:2^n-1)*2-97)*(1:n)'==0)

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


ঠিক আছে, +1 আমার ধারণা। :) আমার পোস্ট করার সময় এটি দেখেনি।
স্টিভি গ্রিফিন

হেহ। আমি এখন পর্যন্ত তোমাকে দেখিনি
লুইস মেন্ডো







1

পাইথ, 14 13 বাইট

lf!s.nT*F_BRS

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

ব্যাখ্যা

lf!s.nT*F_BRS
            SQ  Take the list [1, ..., <implicit input>].
         _BR    Get the pairs [[1, -1], [2, -2], ...].
       *F       Take the Cartesian product.
 f!s.nT         Find the ones where the flattened sum is 0.
l               Take the length.


1

স্ট্যাক্স , 9 বাইট

è%é┐╬@₧╠¬

এটি চালান এবং এটি ডিবাগ করুন

এখন পর্যন্ত সংক্ষিপ্ত উত্তরগুলির মধ্যে একটি জেলির কাছে পরাজিত।

আমি মনে করি যে শূন্যের লক্ষণগুলিতে স্পষ্টভাবে যাচাই করা খুব আভাসের নয়, সুতরাং পরিবর্তে আমি পাওয়ারসেটটি নিই এবং পরীক্ষা করব যে পাওয়ারশেটে কতগুলি সেট অর্ধম ত্রিভুজাকার সংখ্যার যোগফল রয়েছে। এই পদ্ধতিটি আশ্চর্যজনকভাবে নয়, একই সাথে একই সময়ে জটিলতাগুলির মধ্যে যা চিহ্নগুলি শূন্যের সমষ্টি তা পরীক্ষা করে।

এএসসিআইআই সমতুল্য:

RS{|+Hmx|+#

0

পাইথ , 10 বাইট

/mysdySQsS

এটি অনলাইনে চেষ্টা করুন। বিকল্পভাবে, সমস্ত পরীক্ষার কেস একবারে যাচাই করুন

Explaination:

/mysdySQsS    Implicit: Q=input()
      SQ      Generate range [1...Q]
     y        Generate powerset of above
 m            Map d in the above over...
  ysd         ... double the sum of d
        sS    Sum of range [1...Q] (final Q is implicit)
/             Count the matches (implicit output)

0

জে , 28 বাইট

(*>:){1j3#1+//.@(*/)/@,.=@i.

OEIS থেকে অন্য সংজ্ঞাটি ব্যবহার করে যেখানে a(n) = coefficient of x^(n(n+1)/4) in Product_{k=1..n} (1+x^k) if n = 0 or 3 mod 4 else a(n) = 0

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

ব্যাখ্যা

(*>:){1j3#1+//.@(*/)/@,.=@i.  Input: n
                          i.  Range [0, n)
                        =     Self-Classify. Forms an identity matrix of order n
          1           ,.      Stitch. Prepend 1 to each row
                    /         Reduce using
                                Convolution
                 */               Product table
           +//.                   Sum along anti-diagonals
      1j3#                    Copy each once, padding with 3 zeroes after
     {                        Index at n*(n+1)
  >:                            Increment n
 *                              Times n


0

গোল> <> , 26 বাইট

:IFPlMF2K+}:@-}||0lMF$z+|h

এটি অনলাইন চেষ্টা করুন! বা 1 থেকে 16 পর্যন্ত পরীক্ষার মামলা চালান!

কিভাবে এটা কাজ করে

:IFPlMF2K+}:@-}||0lMF$z+|h

Main outer loop
:IFPlMF ...... ||
:        Duplicate top; effectively generate two explicit zeroes
         Top is the loop counter `i`;
         the rest is the generated 2**i sums
 I       Take input as number
  F ........... |  Pop n and loop n times
   P     i++
    lM   Push stack length - 1, which is 2**(i-1)
      F ...... |   Loop 2**(i-1) times

Main inner loop: generate +i and -i from 2**(i-1) previous sums
2K+}:@-}
          Stack: [... x i]
2K        [... x i x i]    Copy top two
  +}      [x+i ... x i]    Add top two and move to the bottom
    :@    [x+i ... i i x]  Duplicate top and rotate top 3
      -}  [i-x x+i ... i]  Subtract and move to the bottom

Counting zeroes
0lMF$z+|h
0lM        Push zero (zero count) and 2**n (loop count)
   F...|   Loop 2**n times
    $z+    Swap top two; Take logical not; add to the count
        h  Print top as number and halt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.