मेरे अवगुणों से मेरी आकुलता घटाओ


19

एक गैर-नकारात्मक पूर्णांक को देखते हुए, इसके सम अंकों के योग और इसके विषम अंकों के योग के बीच पूर्ण अंतर लौटाएं।

डिफ़ॉल्ट नियम

  • स्टैंडर्ड लोफॉल्स लागू होते हैं।

  • आप इनपुट ले सकते हैं और किसी भी मानक इनपुट / आउटपुट विधि द्वारा आउटपुट प्रदान कर सकते हैं।

  • आप इनपुट को स्ट्रिंग के रूप में, पूर्णांक के रूप में या अंकों की सूची के रूप में ले सकते हैं।

  • यह , इसलिए हर भाषा में बाइट्स में सबसे छोटा कोड जीत जाता है!

परीक्षण के मामलों

इनपुट ~> आउटपुट

0 ~> 0 (! 0-0 | = 0)
1 ~> 1 (! 1-0 | = 1)
12 ~> 1 (! 2-1 | = 1)
333 ~> 9 (! 0- (3 + 3 + 3) | = 9)
459 ~> 10 (! 4- (5 + 9) | = 10)
2469 ~> 3 (! (2 + 4 + 6) -9 | = 3)
1234 ~> 2 (! (2 + 4) - (1 + 3) | = 2)

1
क्या हम चींटियों की सूची के रूप में इनपुट ले सकते हैं?
Adám

4
@ Mr.Xcoder भी तुच्छ नहीं होगा। यह चुनौती को अनावश्यक रूप से जटिल बनाता है और यह एक मनमानी आवश्यकता है जो बाइट्स को जोड़ता है।
ओकेक्स

4
@ Mr.Xcoder गिरगिट को चुनौती नहीं देता । सबसे महत्वपूर्ण वाक्य जो आप यहाँ देखना चाहते हैं, वह दो या अधिक असंबंधित कोर चुनौतियों को एक में मिलाना है - चुनौती को अलग-अलग चुनौतियों में विभाजित करने या अनावश्यक भागों को छोड़ने पर विचार करें
Okx

1
* चुनौती पर चमेल
कैलकुलेटर

1
मैंने @Okx के नियम बदल दिए हैं। अंकों की सूची के रूप में लेना अब अनुमति है । मुझे अभी भी नहीं लगता कि यह इसे शराबी बना देगा।
श्री एक्सकोडर

जवाबों:


8

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

-*æ.¹A

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

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

-*æ.¹A  Main link. Argument: A (digit array)

-*      Raise -1 to A's digits, yielding 1 for even digits and -1 for odd ones.
    ¹   Identity; yield A.
  æ.    Take the dot product of the units and the digits.
     A  Apply absolute value.

आप एक सूची के रूप में इनपुट लेकर 1 बाइट बचा सकते हैं।
कैलक्यूलेटरफ्लेन

मैं कर रहा हूँ एक सूची के रूप इनपुट लेने।
डेनिस

मैं संशोधन 2 के बारे में बात कर रहा हूँ
कैलक्यूलेटर

Raise -1 to A's digits, yielding 1 for even digits and 0 for odd ones.umm, मुझे लगता है कि आपने कुछ गड़बड़ किया है या कुछ और ...
एरिक आउटगोल्फर

2
@EriktheOutgolfer डार ऑफ-बाय-वन एरर।
डेनिस

8

शेन्ज़ेन मैं / हे MCxxxx स्क्रिप्ट, 197 (126 + 71) बाइट्स

चिप 1 (MC6000):

  • x0: सूची के रूप में इनपुट
  • x2: चिप 2 एक्स 1
  • x3: MC4010
mov 0 dat
j:
mov x0 acc
mov 70 x3
mov -1 x3
mov acc x3
mul x3
mov acc x2
mov dat acc
add 1
tlt acc 3
mov acc dat
+jmp j
slx x0

चिप 2 (MC4000):

  • p0: आउटपुट
  • x0: MC4010
  • X1: चिप 1 x2
mov x1 acc
add x1
add x1
mov 30 x0
mov 0 x0
mov acc x0
mov x0 p0
slx x1

1
(आप <!-- -->भरण पाठ के बजाय किसी सूची के ठीक बाद कोड प्राप्त करने के लिए टिप्पणी कर सकते हैं । या 4 और रिक्त स्थान वाले कोड को इंडेंट कर सकते हैं।)
Mat

5

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

सूची के रूप में पूर्णांक बनाता है। इसे ऑनलाइन आज़माएं

lambda A:abs(sum((-1)**i*i for i in A))

-3 बाइट्स @ Mr.Xcoder
-1 बाइट की बदौलत @ovs को धन्यवाद


1
का प्रयोग करें [i,-i][i%2]बजाय i%2and i or -iके लिए 40 बाइट्स
श्री एक्सकोडर

2
(-1)**i*i39 बाइट्स के लिए
ovs

5

टीआई-बेसिक, 18 9 बाइट्स

abs(sum((-1)^AnsAns

व्याख्या

सूची में प्रत्येक अंक को अपनी शक्ति से गुणा करें, प्रत्येक विषम अंक को नकारते हुए, उन्हें संक्षेप में लिखें।


4

सी (जीसीसी) , 59 58 57 बाइट्स

i;f(char*v){for(i=0;*v;v++)i+=*v%2?*v-48:48-*v;v=abs(i);}

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


1
यदि यह मदद करता है, तो मैंने नियमों को बदल दिया है और अब आप एक सूची के रूप में इनपुट लेने में सक्षम हैं। उम्मीद है कि बाइट्स बचाएगी। मैं सी नहीं जानता, इसलिए यह सिर्फ एक सुझाव है।
श्री Xcoder

4

आर, 30 29 बाइट्स

abs(sum((d=scan())-2*d*d%%2))

d = scan() इनपुट नंबर को एक के बाद एक अंक लेता है।

-1 बाइट @Giuseppe को धन्यवाद!


यह काफी उत्कृष्ट है! हालांकि, एक 1 बाइट की बचत की जानी है:abs(sum((d=scan())-2*d*d%%2))
Giuseppe

@Giuseppe धन्यवाद, अच्छी टिप, संपादित!
18

4

सी #, 57 बाइट्स

namespace System.Linq{i=>Math.Abs(i.Sum(n=>n%2<1?n:-n))}

के रूप में इनपुट लेता है iऔर पूर्णांक को ऋणात्मक में बदलकर पूर्णांकों को गाता है।


पहले यहाँ जवाब। कोई सुराग नहीं अगर मुझे इस पूरी चीज़ को एक वास्तविक C # प्रोग्राम में लपेटने की आवश्यकता है और उन बाइट्स को भी गिनें।
TyCobb

आपको बॉयलरप्लेट को शामिल करना होगा namespace System.Linq{और एक वास्तविक कार्य करना होगा। संदर्भ के लिए अन्य C # उत्तर देखें
श्री Xcoder

@ Mr.Xcoder जानकारी के लिए धन्यवाद। सोचो मुझे मिल गया। लगभग मेरी बाइट गिनती = (lol
TyCobb

हाँ, C # वास्तव में सर्वश्रेष्ठ गोल्फिंग भाषा नहीं है
श्री एक्सकोडर

@ Mr.Xcoder नहींं, लेकिन मुझे लगा कि नियम शिथिल हो गए हैं क्योंकि मैंने नाम स्थान के सामान के बिना पहले पृष्ठ पर एक पतला संस्करण देखा और ए नहीं देखा Main। केवल यही कारण है कि मुझे लगा कि मैं इसके साथ जवाब दूंगा। ओह कुआँ।
टाइकोब जुब

4

गणितज्ञ, 20 बाइट्स

Abs@Tr[(-1)^(g=#)g]&

इनपुट के रूप में अंकों की एक सूची लेता है

"नए नियमों" के बारे में बताने के लिए @LLLAMnYP को विशेष धन्यवाद


मुझे इससे हराएं! :) आप शायद जरूरत नहीं है *
ग्रेग मार्टिन

अब जब ओपी ने आवश्यकताओं को शिथिल कर दिया है तो आपका कोड तुच्छ रूप से बहुत छोटा हो सकता है। +1
LLLAMnYP


3

नीम , 7 बाइट्स

ΓDᛃΞ𝐍}𝐬

स्पष्टीकरण:

Γ        Apply the following to each element in the input array
 D         Duplicate
  ᛃ        Modulo 2, then perform logical NOT
   Ξ       If truthy, then:
    𝐍        Multiply by -1
      }  Close all currently running loops/conditionals etc
       𝐬 Sum the resulting array

जिसके पास एक बिलिन नहीं है जो 2 मॉड्स करता है और तार्किक रूप से परिणाम नहीं देता है?
१17:२२ पर caird coinheringaahing

@cairdcoinheringaahing यह मूल रूप से 'चेक
इफ़

3

एपीएल, 8 बाइट्स

|⊢+.ׯ1*⊢

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

कैसे?

¯1*⊢- -1 एन के लिए nमें

[ 4 5 91 ¯1 ¯1]

⊢+.×- साथ गुणा गुणन o, फिर योग

[ +/ 4 5 9 × 1 ¯1 ¯1+/ 4 ¯5 ¯9¯10]

| - निरपेक्ष मूल्य


क्या आप परीक्षण का वातावरण प्रदान कर सकते हैं?
श्री एक्सकोडर

@ Mr.Xcoder जोड़ा
ऊरीएल

|⊢+.ׯ1*⊢नए इनपुट कल्पना के साथ।
Adám

@ Adám धन्यवाद विश्वास नहीं कर सकता कि मैं उत्पाद चूक गया।
उरीएल

क्या आप स्पष्टीकरण में अधिक विस्तार प्रदान कर सकते हैं? क्या इस विधि को J में पोर्ट किया जा सकता है? मैं वर्तमान में कुंजी का उपयोग कर रहा (मेरा उत्तर देखें) लेकिन इस विधि में कुछ बाइट्स बंद दाढ़ी हो सकता है ...
जोनाह

3

जावास्क्रिप्ट (ईएस 6), 43 38 बाइट्स

इनपुट को एक स्ट्रिंग के रूप में अंकों की एक सरणी लेता है ।

a=>a.map(d=>s+=d&1?d:-d,s=0)&&s>0?s:-s

परीक्षण के मामलों


3

संपादित करें: एक और अधिक गोल्फ केंद्रित दृष्टिकोण:

EXCEL, 42 36 29 बाइट्स

मैजिक ऑक्टोपस Urn के लिए 6 बाइट्स थैंक्स बोए गए 7 बाइट्स डेनिस '-1 ^ एप्रोच (जो कि मैंने अभी सीखा, एक्सेल में सरणियों पर काम करता है) का उपयोग करके बचा लिया

=ABS(SUMPRODUCT(A:A,-1^A:A))

इनपुट के लिए A कॉलम में पूर्णांकों की सूची लेता है। संभवतः आगे गोल्फ हो सकता है, या स्ट्रिंग संस्करण का उपयोग करके, इनपुट के लिए A1 में स्ट्रिंग ले सकता है।

EXCEL, 256 बाइट्स

=ABS(LEN(SUBSTITUTE(A1,1,""))-2*LEN(SUBSTITUTE(A1,2,""))+3*LEN(SUBSTITUTE(A1,3,""))-4*LEN(SUBSTITUTE(A1,4,""))+5*LEN(SUBSTITUTE(A1,5,""))-6*LEN(SUBSTITUTE(A1,6,""))+7*LEN(SUBSTITUTE(A1,7,""))-8*LEN(SUBSTITUTE(A1,8,""))+9*LEN(SUBSTITUTE(A1,9,""))-5*LEN(A1))

यहाँ छवि विवरण दर्ज करें


1
डिस्क्लेमर, केवल लंबाई में 100 से कम संख्या के लिए काम करता है
मैजिक ऑक्टोपस Urn

1
A पर स्विच करना: A 6 बाइट्स बचाता है और उस समस्या को दूर करता है।
मार्क

वाह, शायद ही कभी मेरी रचनात्मक आलोचना बाइट्स को बचाती है, +1 आपके एक्सेल ज्ञान सर के लिए।
मैजिक ऑक्टोपस Urn

इसके अलावा, You may take input as a String, as an Integer or as a list of digits.आपके 42 बाइट उत्तर के कारण आपके द्वारा उपयोग किए जाने वाले उत्तर होने चाहिए।
मैजिक ऑक्टोपस Urn

पहला एक विनोदी प्रयास था, लेकिन मैं उन्हें चारों ओर से बदल दूंगा।
मार्क


2

भूसी , 7 बाइट्स

≠0ṁṠ!¡_

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

इनपुट के रूप में अंकों की एक सूची लेता है।

अभी भी एक "एब्स" बिलिन याद आ रही है, लेकिन एक ही परिणाम सभी एक ही :)

व्याख्या

Ṡ!¡_एक फ़ंक्शन है जो एक संख्या लेता है nऔर फिर n-1फ़ंक्शन _(नेगेशन) को कई बार लागू करता है n। इसका परिणाम nविषम nया सम के -nलिए होता है n

एक सूची के प्रत्येक तत्व के लिए एक फ़ंक्शन लागू करता है और परिणामों को बताता है।

≠0 एक संख्या और 0 के बीच पूर्ण अंतर लौटाता है।


2

05AB1E , 6 बाइट्स

डेनिस को -1 पावर ट्रिक के लिए धन्यवाद । अंकों की सूची के रूप में इनपुट लेता है

®sm*OÄ

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

व्याख्या

®sm*OÄ                                               Example [4, 5, 9]
®      # Push -1                                   % STACK: -1
 sm    # Take -1 to the power of every number      % STACK: [1, -1, -1]
         in the input list 
   *   # Multiply with original input              % Multiply [1, -1, -1] with [4, 5, 9] results in STACK: [4, -5, -9]
    O  # Sum them all together                     % STACK: -10
     Ä # Absolute value                            % STACK: 10
       # Implicit print

मैं स्पष्टीकरण का पालन नहीं कर सकता। क्या आप कृपया एक उदाहरण जोड़ेंगे।
टाइटस

@ तुम वहाँ जाओ। आशा है कि यह मदद करता है :)
Datboi

और यहां मैं È2*<*Oएक गंदे कैजुअल की तरह था ।
मैजिक ऑक्टोपस यूरन

2

PHP, 51 बाइट्स

while(~$n=$argn[$i++])$s+=$n&1?$n:-$n;echo abs($s);

अंकों को $sविषम में जोड़ता है , यदि घटाता है तो भी। साथ पाइप के रूप में चलाएँ -nR

या

while(~$n=$argn[$i++])$s+=(-1)**$n*$n;echo abs($s);

डेनिस -1शक्ति चाल का उपयोग करना ।


2

गणितज्ञ, 67 बाइट्स

(s=#;Abs[Subtract@@(Tr@Select[IntegerDigits@s,#]&/@{EvenQ,OddQ})])&

2

PHP , 54 बाइट्स

for(;~$n=$argn[$i++];)${eo[$n&1]}+=$n;echo abs($e-$o);

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

PHP , 57 बाइट्स

समान और विषम राशि को किसी सरणी में संग्रहीत करें

for(;~$n=$argn[$i++];)$r[$n&1]+=$n;echo abs($r[0]-$r[1]);

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

PHP , 57 बाइट्स

सम और विषम राशि को दो चर में संग्रहित करें

for(;~$n=$argn[$i++];)$n&1?$o+=$n:$e+=$n;echo abs($e-$o);

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


54 बाइट्स: विषम राशि ${1}और सम राशि में ${0}:while(~$n=$argn[$i++])${$n&1}+=$n;echo abs(${1}-${0});
टाइटस

@ अच्छा मुझे लगता है कि 'के लिए' (;; ~ $ n = $ argn [$ i ++];) $ {eo [$ n & 1]} + = $ n; इको एब्स ($ e- $ o); `भी एक अच्छा मध्यम है । या हम इसे और अधिक प्राकृतिक कर सकते हैं for(;~$n=$argn[$i++];$s+=$n)$u+=($n&1)*$n;echo abs($s-2*$u);और for(;~$n=$argn[$i++];)$u+=(($n&1)-.5)*2*$n;echo abs($u);एक दिलचस्प तरीका है
जार्ज ह्यूल्सरमन

2

हास्केल , 47 42 39 38 26 25 बाइट्स

-1 निम्मी को धन्यवाद

-12 ब्रूस का धन्यवाद

-1 एक्सनोर के लिए धन्यवाद

abs.sum.map(\x->x*(-1)^x)

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


1
आप इनलाइन कर सकते हैं s: ((*)=<<((-1)^))
नीमी

1
यह सिर्फ लिखने के लिए एक बाइट कम है (\x->x*(-1)^x)
ज़नोर

1

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

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

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

इनपुट के रूप में अंकों की एक सूची लेता है।

  • $_ इनपुट तर्क है।
  • .map(* % 2 * 2 - 1)प्रत्येक अंक को या तो 1या -1इस पर निर्भर करता है कि क्या अंक क्रमशः विषम या सम है।
  • Z* गुणा का उपयोग करके सम / विषम सूची के साथ अंकों की मूल सूची ज़िप करता है।

1

ब्रिंगोल्फ , 18 बाइट्स

{.2%?M|}&+v&+c-!s*

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

अंकों की सूची के रूप में इनपुट लेता है

व्याख्या

{.2%?M|}&+v&+c-!s*  Implicit input from commandline args
{......}            Foreach loop, runs on each item in the stack..
 .2%                ..Parity check, push 1 if odd, 0 if even
    ?               ..If last item != 0 (pops last item)..
     M              ....Move last item to next stack
      |             ..Endif
        &+          Sum entire stack
          v&+       Switch to next stack and sum entire stack
             c-     Collapse into stack1 and subtract
               !s   Sign check, push 1 if last item is positive, -1 if last item is
                    negative, 0 if last item is 0
                 *  Multiply last item by sign, gets absolute value
                    Implicit output

1

आर, 72 43 बाइट्स

b=(d=scan())%%2<1;abs(sum(d[b])-sum(d[!b]))

सबसे पहले, d = scan()नंबर को इनपुट के रूप में लेता है, एक के बाद एक अंक (@Giuseppe टिप्पणी के लिए धन्यवाद!)
फिर, अंकों की समानता के आधार पर प्रत्येक सूचकांक में एक या मूल्य के b = d %% 2 <1लिए संबद्ध करता है। इसलिए, मान हैं भी संख्या के लिए, और कर रहे हैं अजीब मूल्यों के लिए।bTRUEFALSEbTRUE!bTRUE

फाइनली, abs(sum(d[b]) - sum(d[!b]))काम करता है।


<1एक बाइट से कम है ==0, लेकिन ध्यान दें कि आप इनपुट को अंकों की एक सूची के रूप में भी ले सकते हैं।
Giuseppe

@Giuseppe अच्छी तरह से देखा! धन्यवाद !
फ्रैडरिक





1

x86-64 मशीन कोड, 30 बाइट्स

31 C0 99 8B 4C B7 FC F6 C1 01 74 04 01 CA EB 02 01 C8 FF CE 75 ED 29 D0 99 31 D0 29 D0 C3

उपरोक्त कोड एक फ़ंक्शन को परिभाषित करता है जो पूर्णांक अंकों की सूची / सरणी को स्वीकार करता है और इसके सम अंकों के योग और इसके विषम अंकों के योग के बीच पूर्ण अंतर लौटाता है।

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

फ़ंक्शन सिस्टम V AMD64 कॉलिंग कन्वेंशन के अनुरूप है , जो कि Gnu / UNIX सिस्टम पर मानक है। विशेष रूप से, पहला पैरामीटर (सूची की शुरुआत के लिए सूचक) में पारित किया जाता है RDI(जैसा कि यह 64-बिट कोड है, यह 64-बिट सूचक है), और दूसरा पैरामीटर (सूची की लंबाई) में पारित किया गया है ESI( यह केवल 32-बिट मान है, क्योंकि यह खेलने के लिए पर्याप्त अंकों से अधिक है, और स्वाभाविक रूप से इसे गैर-शून्य माना जाता है)। परिणाम EAXरजिस्टर में वापस कर दिया जाता है ।

यदि यह कोई स्पष्ट है, तो यह सी प्रोटोटाइप होगा (और आप इसे C से फ़ंक्शन को कॉल करने के लिए उपयोग कर सकते हैं):

int OddsAndEvens(int *ptrDigits, int length);

असेंबली असेंबली mnemonics:

; parameter 1 (RDI) == pointer to list of integer digits
; parameter 2 (ESI) == number of integer digits in list (assumes non-zero, of course)
OddsAndEvens:
   xor  eax, eax              ; EAX = 0 (accumulator for evens)
   cdq                        ; EDX = 0 (accumulator for odds)
.IterateDigits:
   mov  ecx, [rdi+rsi*4-4]    ; load next digit from list
   test cl, 1                 ; test last bit to see if even or odd
   jz   .IsEven               ; jump if last bit == 0 (even)
.IsOdd:                       ; fall through if last bit != 0 (odd)
   add  edx, ecx              ; add value to odds accumulator
   jmp  .Continue             ; keep looping
.IsEven:
   add  eax, ecx              ; add value to evens accumulator
.Continue:                    ; fall through
   dec  esi                   ; decrement count of digits in list
   jnz  .IterateDigits        ; keep looping as long as there are digits left

   sub  eax, edx              ; subtract odds accumulator from evens accumulator

   ; abs
   cdq                        ; sign-extend EAX into EDX
   xor  eax, edx              ; XOR sign bit in with the number
   sub  eax, edx              ; subtract sign bit

   ret                        ; return with final result in EAX

यहाँ कोड के बारे में संक्षिप्त जानकारी दी गई है:

  • सबसे पहले, हम EAXऔर EDXरजिस्टरों को शून्य करते हैं , जिसका उपयोग सम और विषम अंकों के योग को पकड़ने के लिए किया जाएगा। EAXरजिस्टर से हटा दिया गया है XORही (2 बाइट्स) के साथ यह ing, और फिर EDXरजिस्टर साइन-विस्तार में EAX (द्वारा मंजूरी दे दी है CDQ, 1 बाइट)।
  • फिर, हम उस लूप में जाते हैं जो सरणी में पारित सभी अंकों से गुजरता है। यह एक अंक प्राप्त करता है, यह देखने के लिए परीक्षण करता है कि क्या यह सम या विषम है (कम से कम महत्वपूर्ण बिट का परीक्षण करके, जो 0 होगा यदि मान सम है या 1 यदि यह विषम है), और फिर उसके अनुसार कूदता या गिरता है, उचित संचायक के लिए मूल्य। लूप के निचले भाग में, हम डिजिट काउंटर ( ESI) को घटाते हैं और तब तक लूपिंग जारी रखते हैं, जब तक वह नॉन-जीरो न हो (यानी, जब तक लिस्ट रिजेक्ट होने के लिहाज से ज्यादा अंक बचे हैं)।

    यहां केवल एक चीज मुश्किल है प्रारंभिक MOV निर्देश, जो x86 पर संभव सबसे जटिल पते मोड का उपयोग करता है। * यह लेता हैRDI आधार रजिस्टर (सूची की शुरुआत का सूचक), तराजू RSI(लंबाई काउंटर, जो सूचकांक के रूप में कार्य करता है) को 4 (बाइट में एक पूर्णांक का आकार) के रूप में , और आधार में जोड़ता है, और फिर कुल से 4 घटाते हैं (क्योंकि लंबाई काउंटर एक-आधारित है और हमें शून्य-आधारित होने के लिए ऑफसेट की आवश्यकता होती है)। यह सरणी में अंक का पता देता है, जिसे बाद में ECXरजिस्टर में लोड किया जाता है ।

  • लूप समाप्त होने के बाद, हम बुराइयों से बाधाओं को घटाते हैं (EAX -= EDX ) ।

  • अंत में, हम एक कॉमन ट्रिक का उपयोग करते हुए निरपेक्ष मान की गणना करते हैं - वही जिसका उपयोग सी कंपाइलर द्वारा किया जाता है abs फ़ंक्शन के । मैं इस बारे में विवरण में नहीं जाऊँगा कि यह चाल यहाँ कैसे काम करती है; संकेत के लिए कोड टिप्पणियाँ देखें, या एक वेब खोज करें।

__
* कोड को सरल एड्रेसिंग मोड्स का उपयोग करने के लिए फिर से लिखा जा सकता है, लेकिन यह इसे छोटा नहीं बनाता है। मैं एक वैकल्पिक कार्यान्वयन के साथ आने में सक्षम था RDIजो लूप के माध्यम से प्रत्येक बार 8 से घटाया और बढ़ाया गया था, लेकिन क्योंकि आपको अभी भी काउंटर में कमी करनी है ESI, यह वही 30 बाइट्स निकला। मुझे शुरू में जो उम्मीद थी कि add eax, DWORD PTR [rdi]वह केवल 2 बाइट्स है, दो अपंजीकृत मूल्यों को जोड़ने के समान है। यहाँ वह कार्यान्वयन है, अगर केवल किसी को बचाने के प्रयास में किसी को बचाने के लिए मुझे कुछ प्रयास :-)

                    OddsAndEvens_Alt:
31 C0                   xor    eax, eax
99                      cdq
                    .IterateDigits:
F6 07 01                test   BYTE PTR [rdi], 1
74 04                   je     .IsEven
                    .IsOdd:
03 17                   add    edx, DWORD PTR [rdi]
EB 02                   jmp    .Continue
                    .IsEven:
03 07                   add    eax, DWORD PTR [rdi]
                    .Continue:
48 83 C7 08             add    rdi, 8
FF CE                   dec    esi
75 ED                   jne    .IterateDigits
29 D0                   sub    eax, edx
99                      cdq
31 D0                   xor    eax, edx
29 D0                   sub    eax, edx
C3                      ret


1

टीआई-बेसिक, 11 6 बाइट्स

abs(sum(Anscos(πAns

सूची के रूप में इनपुट लेता है। i²^Ansदो बाइट्स बचाता है (-1)^Ansक्योंकि हमें कोष्ठक की आवश्यकता नहीं है।

abs(sum(Anscos(πAns
           cos(πAns                  1 for evens, -1 for odds
        Ans                          Multiply by original list
abs(sum(                             Sum the list and take absolute value, which also
                                     fixes rounding errors from cos(.

1

जे, 14 बाइट्स

|-/(2&|+//.[),

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

व्याख्या

|                absolute value of
 -/              the difference between
                 the items on the list returned by this fork
   (2&|          is an item odd? (1 for yes, 0 for no)
       +//.      the "key" verb /. which partitions on above (even / odd) then sums
           [)    identity, ie, the list of digits passed
             ,   turn it into a list (to handle 1 element case)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.