Nth क्रॉस-वैकल्पिक योग का पता लगाएं


17

किसी एकल धनात्मक पूर्णांक के इनपुट को देखते हुए, उस पूर्णांक से मेल खाती "क्रॉस-वैकल्पिक राशि" का उत्पादन करते हैं।

इनपुट का उदाहरण लें n=5। क्रॉस-वैकल्पिक योग को खोजने के लिए, पहले चौड़ाई और ऊंचाई का एक वर्ग ग्रिड बनाएं n, जो बाएं से दाएं और ऊपर से नीचे तक पढ़ना, 1एक-एक स्थिति से शुरू और बढ़ता है:

 1  2  3  4  5
 6  7  8  9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

फिर, ग्रिड से "सम" (जो दोनों विकर्ण संयुक्त हैं) का निर्माण करें।

 1           5
    7     9
      13
   17    19
21          25

1 5 7 9 13 17 19 21 25

अंत में, इस क्रम का वैकल्पिक योग लें:

1+5-7+9-13+17-19+21-25

-11

एक अन्य उदाहरण, n=6(केवल यह दिखाने के लिए कि क्रॉस समान संख्या के लिए कैसा दिखता है n):

 1  2  3  4  5  6
 7  8  9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36

 1              6
    8       11
      15 16
      21 22
   26       29
31             36

1+6-8+11-15+16-21+22-26+29-31+36

20

चूंकि यह , बाइट्स में सबसे छोटा कोड जीत जाएगा।

यहाँ के लिए सही आउटपुट हैं n=1करने के लिए n=100जो आप परीक्षण मामलों के रूप में उपयोग कर सकते हैं,:

1
4
-3
10
-11
20
-23
34
-39
52
-59
74
-83
100
-111
130
-143
164
-179
202
-219
244
-263
290
-311
340
-363
394
-419
452
-479
514
-543
580
-611
650
-683
724
-759
802
-839
884
-923
970
-1011
1060
-1103
1154
-1199
1252
-1299
1354
-1403
1460
-1511
1570
-1623
1684
-1739
1802
-1859
1924
-1983
2050
-2111
2180
-2243
2314
-2379
2452
-2519
2594
-2663
2740
-2811
2890
-2963
3044
-3119
3202
-3279
3364
-3443
3530
-3611
3700
-3783
3874
-3959
4052
-4139
4234
-4323
4420
-4511
4610
-4703
4804
-4899
5002

8
नाइट पिक: यह एक वैकल्पिक राशि नहीं है। आप पहले दो शब्द जोड़ रहे हैं।
डेनिस

जवाबों:


26

जेली, 21 19 11 10 7 बाइट्स

²~³¡H+2

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

विचार

एक दूसरे के लिए मान लें कि अंतिम योग का पहला शब्द जोड़ के बजाय घटाया गया है।

चलो n एक सकारात्मक पूर्णांक होना।

यहां तक ​​कि मामला

 1              6
    8       11
      15 16
      21 22
   26       29
31             36

पंक्तियों के निचले आधे हिस्से पर विकर्ण तत्वों के बीच अंतर पहले n natural 2 विषम प्राकृतिक संख्याएं हैं। के बाद से 1 + 3 + 5 + ... + (2k + 1) = कश्मीर 2 , वे करने के लिए योग (एन ÷ 2) 2 = n 2 ÷ 4

इस उदाहरण में

- 1 + 6 - 8 + 11 - 15 + 16 - 21 + 22 - 26 + 29 - 31 + 36  =
-(1 - 6)-(8 - 11)-(15 - 16)-(21 - 22)-(26 - 29)-(31 - 36) =
(    5   +   3    +    1  )+(   1    +    3    +    5   ) =
             9             +              9               = 18

इस प्रकार, योग 2 × n 2 the 4 = n 2 2 2 है

अजीब मामला

 1           5
    7     9
      13
   17    19
21          25

ऊपर और नीचे ( 1और 5, 21और 25, 7और 9, 17और 19) से संबंधित पंक्तियों पर विकर्ण तत्वों के बीच अंतर समान है, इसलिए वे वैकल्पिक राशि में रद्द कर देंगे।

इस उदाहरण में

- 1 + 5 - 7 + 9 - 13 + 17 - 19 + 21 - 25  =
-(1 - 5)-(7 - 9)- 13 +(17 - 19)+(21 - 25) =
    4   +   2   - 13 -    2    -    4     = -13

जो कुछ बचा है, वह केंद्रीय तत्व का ऋणात्मक है, जो कि पहले और अंतिम अंक का अंकगणितीय माध्य है, इसलिए इसकी गणना इस प्रकार की जा सकती है - (n 2 + 1) negative 2

सामान्य मामला

चूंकि ~ एक्स = - (x + 1) दो के पूरक पूर्णांकों (के लिए ~ अर्थ है नहीं बिटवाइज़), अजीब मामले के लिए सूत्र के रूप में लिखा जा सकता है n ~ 2 ÷ 2

इसके अलावा, चूंकि मूल राशि का पहला शब्द ( 1 ) घटाए जाने के बजाय जोड़ा जाता है, उपरोक्त सूत्र 2 की त्रुटि छोड़ते हैं , जिसे सही करना होगा।

इसलिए, n th क्रॉस-अल्टरनेटिव योग n 2 2 2 + 2 है यदि n सम है, और ~ n 2 it 2 + 2 यदि यह विषम है।

अंत में, बिटवाइज़ नॉट एक इंवोल्यूशन है, यानी, सभी के लिए ~~ x = x । इस तरह ~~~ x = ~ x , ~~~~ x = x , और, सामान्य रूप में, ~ n x (जिसका अर्थ है कि ~ को n बार लागू किया जाता है ) x है यदि n सम है और ~ x यदि यह विषम है।

इस प्रकार, हम अपने सामान्य सूत्र को सभी सकारात्मक पूर्णांकों n के लिए ~ n n 2 2 2 + 2 के रूप में फिर से लिख सकते हैं ।

कोड

²~³¡H+2    Main link. Input: n

²          Yield n².
 ~         Apply bitwise NOT to n²...
  ³¡           n times.
    H      Halve the result.
     +2    Add 2.

1
मुझे पता था कि कुछ सरल फार्मूले हैं, लेकिन आपकी व्याख्या और निष्पादन सिर्फ अद्भुत है। +1
ETHproductions

5

जावास्क्रिप्ट, 40 38 22 बाइट्स

कि नए गुस्से का उपयोग कर, फैंसी बंद फार्म समाधान है कि सभी क्रोध है!

n=>(n%2?3-n*n:4+n*n)/2

थॉमसकेवा के लिए धन्यवाद, मैं अपने महंगा पुनरावर्ती कार्य को समाप्त कर सकता हूं।


आपको सिर्फ एक बार बिटवाइस करने की जरूरत है अगर n% 2 वास्तव में, मुझे लगता है कि जेएस में यह सिर्फ करने के लिए छोटा हो सकता है(n%2?3-n*n:4+n*n)/2
lirtosiast


4

सीजाम, 13 15 बाइट्स

ri2#_{~}*2/2+

डेनिस के लिए धन्यवाद दो बाइट्स।

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


3
मेरा पहला सीजेएम उत्तर!
लुइस मेंडो

1
दो बाइट्स के 2%{~}&साथ बदलने से {~}*बचाता है।
डेनिस

@ डेनिस बहुत अच्छा! धन्यवाद!
लुइस मेंडो

3

मिन्कोलांग 0.15 , 26 15 13 बाइट्स

डेनिस के पागल एल्गोरिथ्म का उपयोग करना, और उसके लिए धन्यवाद एक और दो बाइट्स को बंद कर दिया। वह आदमी बाइट काउंट को रोकने के लिए जिम्मेदार है!

n2;d[~]4+2:N.

यहाँ यह कोशिश करो!

व्याख्या

@VoteToClose n^ 2, बिटवाइज़ लागू न करें n, चार जोड़ें, आधा करें। - थॉमस क्वा 7 मिनट पहले

क्यों काम करता है की व्याख्या के लिए डेनिस का जवाब देखें । इस उत्तर पर एक टिप्पणी में, उन्होंने एक और सुधार का सुझाव दिया जो काम करता है क्योंकि :पूर्णांक विभाजन है, इसलिए मैं स्टैक के शीर्ष को नकार सकता हूं और द्विआधारी पूरक करने से +1 के बारे में चिंता नहीं कर सकता। इसके अलावा, n और n ^ 2 में समान समानता है, जो एक स्वैप की आवश्यकता को हटा देती है।

n                Take number from input - n
 2;              n**2
   d             Duplicates top of stack
    [~]          For loop that negates the top of stack n times
       4+        Add 4
         2:      Divide by 2
           N.    Output as number and stop.

2

गोल्फस्क्रिप्ट, 12 बाइट्स

~2?.{~}*2/2+

यह मेरे जेली उत्तर से एल्गोरिथ्म का उपयोग करता है । इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

~            # Evaluate the input.
 2?          # Square it.
   .         # Push a copy of the square.
    {~}      # Push a code block that applies bitwise NOT.
       *     # Execute it n² times. Since n² and n have the same parity,
             # this is equivalent to executing in only n times.
        2/   # Halve the result.
          2+ # Add 2.

2

ईएस 7, 17 बाइट्स

n=>-1**n*n*n+4>>1

@ डेनिस के पाइथन 2 उत्तर का सरल बंदरगाह।

इस उत्तर को लिखते समय मैं अपने ईएस 6 पोर्ट को 17 बाइट्स के लिए भी प्रबंधित करने में सफल रहा!

n=>(n*n^-n%2)/2+2


2

शुद्ध बैश, 28

खैर अब जब @ डेनिस ने हमें यह करने के लिए दिखाया है, तो इसे अपडेट करने की आवश्यकता है:

echo $[-1**$1*($1*$1+1)/2+2]

पिछला उत्तर:

बैश + जीएनयू उपयोगिताओं, 77

यहाँ एक शुरुआत है:

a=$1
(seq 1 $[a+1] $[a*a]
seq $1 $[a>1?a-1:1] $[a*a])|sort -un|paste -sd+-|bc

एन को कमांड-लाइन पैरामीटर के रूप में पास किया जाता है।

pasteवैकल्पिक राशि के उत्पादन के लिए वास्तव में यहाँ काम है। -dविकल्प विभाजक वर्ण, जो चक्रीय उपयोग किया जाता है की एक सूची है।


$[-1**$1*$1*$1+4>>1]और भी छोटा है।
नील

2

जूलिया, 41 40 25 19 16 बाइट्स

n->-n%2$n^2÷2+2

यह एक अनाम फ़ंक्शन है जो पूर्णांक को स्वीकार करता है और पूर्णांक देता है। इसे कॉल करने के लिए, इसे किसी वैरिएबल पर असाइन करें।

डेनिस द्वारा तैयार किया गया दृष्टिकोण, इस प्रकार है। पहले हम n की समता प्राप्त करते हैं , अर्थात n (mod 2), और इसे नकारते हैं। यह हमें इनपुट के लिए 0 और विषम के लिए -1 देता है। हम फिर n 2 के साथ XOR बिट करते हैं । जब n सम है, तो यह सिर्फ n 2 है क्योंकि XOR 0 के साथ सिर्फ संख्या है। जब n विषम होता है, तो -1 के साथ XOR बिटवाइज़ निगेटिव के समान होता है। तो इस बिंदु पर हमारे पास या तो एन 2 या की नहीं बिटवाइज़ एन 2 । हम पूर्णांक इसे 2 से विभाजित करते हैं और परिणाम प्राप्त करने के लिए 2 जोड़ते हैं।

पिछले संस्करण पर Sp3000 के लिए एक बाइट धन्यवाद बचाया, और इस पर डेनिस के लिए 9 धन्यवाद बचा लिया!



1

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

lambda n:(-1)**n*n*n/2+2

यह एक मामूली संशोधन के साथ मेरे जेली उत्तर से एल्गोरिथ्म का उपयोग करता है :

~ N समय लागू करने के बजाय , हम - n बार (-1 ( n ) गुणा करके ) लागू करते हैं। यह समकक्ष है क्योंकि पायथन में ~ x = -x - 1 और पूर्णांक विभाजन फर्श, इसलिए ~ x / 2 = (-x - 1) / 2 = -x / 2


1

अजगर, 11 बाइट्स

+2/u_GQ*QQ2

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

यह काम किस प्रकार करता है

यह मेरे जेली उत्तर से एल्गोरिथ्म का उपयोग करता हैएक मामूली संशोधन के साथ :

~ N समय लागू करने के बजाय , हम - n बार (-1 ( n ) गुणा करके ) लागू करते हैं। यह समतुल्य है क्योंकि पाइथ में ~ x = -x - 1 और पूर्णांक विभाजन फर्श है, इसलिए ~ x / 2 = (-x - 1) / 2 = -x / 2

+2/u_GQ*QQ2  Evaluated input: Q

       *QQ   Yield Q².
   u  Q      Set G = Q². For each non-negative integer below Q:
    _G         Set G = -G.
             Return G.
  /       2  Halve the result.
+2           Add 2.

1

डीसी, १,

डेनिस से एक ही कोशिश की और परीक्षण सूत्र का उपयोग:

?dd*1+r_1r^*2/2+p

यह ऑनलाइन प्रयास करें ओह, Ideone बैश सैंडबॉक्स क्यों शामिल नहीं है dc?

कमांड-लाइन टेस्ट:

for i in {1..100}; do echo $i | dc -e '?dd*1+r_1r^*2/2+p'; done 

?2^1+2~2*1-*2+pदो बाइट बचाता है।
डेनिस

1

जीएस 2, 9 बाइट्स

V,@!α2+''

यह मेरे जेली उत्तर से एल्गोरिथ्म का उपयोग करता है । इसे ऑनलाइन आज़माएं!

V,@e 7+''

समान रूप से छोटा है, लेकिन विशेष रूप से कोई गैर- ASCII वर्ण नहीं है।

यह काम किस प्रकार करता है

V          Parse the input as an integer n.
 ,         Compute n².
  @        Push a copy of n².
   !       Bitwise NOT.
    α      Make a block of the previous instruction.
     2     Execute the block n² times. Since n² and n have the same parity,
           this is equivalent to executing in only n times.
      +    Halve the result.
       ''  Increment twice.

1

जे, 16 बाइट्स

[:<.2%~4+*:*_1^]

यह मेरे जेली उत्तर के समान एल्गोरिथ्म का उपयोग करता है। साथ यह परीक्षण J.js


0

लुआ, 33 बाइट्स ( इसे ऑनलाइन आज़माएं )

i=(...)print((-1)^i*i*i/2-.5*i%2)

यह काम किस प्रकार करता है:

i=(...)print((-1)^i*i*i/2-.5*i%2)
i=(...)                           Take input and store to i
       print(
             (-1)^i               Raise (-1) to the i-th power: -1 if odd, 1 if even
                   *i*i/2         Multiply by i squared and halved.
                         -.5*i%2  i%2 is the remainder when i is divided by 2
                                  if i is odd, then i%2 will be 1, and this expression
                                  will evaluate to -0.5
                                  but if i is even, then i%2 will be 0, which makes
                                  this expression evaluate to 0
                                )

0

दिल्लोग एपीएल, 13 बाइट्स

⌊2+.5××⍨ׯ1*⊢

यह मेरे जेली उत्तर के समान एल्गोरिथ्म का उपयोग करता है। इसे TryAPL पर टेस्ट करें ।

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