ILD की राशि की गणना करें


21

इनपुट:

पूर्णांक

आउटपुट:

इनपुट का योग + इनपुट की लंबाई + इनपुट के प्रत्येक व्यक्तिगत अंक।

nr + nr-length + {sum of digits} = output

उदाहरण:

इनपुट: 99
आउटपुट: 99(एनआर) + 2(एनआर-लंबाई) + (9 + 9)(अंक) →119

इनपुट: 123
आउटपुट: 123 + 3 + (1 + 2 + 3)132

चुनौती नियम:

  • इनपुट में नकारात्मक इनपुट भी हो सकते हैं, जो विशेष रूप से हल किए जाते हैं। -/ शून्य से हस्ताक्षर भी है +1लंबाई के लिए, और पहले का हिस्सा है digit
    उदाहरण के लिए:

    इनपुट: -123
    आउटपुट: -123 + 4 + (-1 + 2 + 3)-115

  • आप मान सकते हैं कि इनपुट और आउटपुट कभी भी एक (32-बिट) पूर्णांक की सीमा के बाहर नहीं होंगे।

सामान्य नियम:

  • यह , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।
    कोड-गोल्फ भाषाओं को गैर-कोडगॉल्फिंग भाषाओं के साथ उत्तर पोस्ट करने से हतोत्साहित न करें। 'किसी भी' प्रोग्रामिंग भाषा के लिए यथासंभव संक्षिप्त उत्तर के साथ आने का प्रयास करें।
  • मानक नियम आपके उत्तर के लिए लागू होते हैं , इसलिए आपको उचित पैरामीटर और रिटर्न-टाइप, पूर्ण कार्यक्रमों के साथ STDIN / STDOUT, फ़ंक्शन / विधि का उपयोग करने की अनुमति दी जाती है। तुम्हारा कॉल।
  • डिफ़ॉल्ट ढीले निषिद्ध हैं।
  • यदि संभव हो, तो कृपया अपने कोड के लिए एक परीक्षण के साथ एक लिंक जोड़ें।
  • इसके अलावा, यदि आवश्यक हो तो एक स्पष्टीकरण जोड़ें।

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

87901 → 87931
123 → 132
99 → 119
5 → 11
1 → 3
0 → 1
-3 → -4
-123 → -115
-900 → -905
-87901 → -87886

अर्ध-संबंधी: सभी अंकों की गणना योग


मुझे लगता है कि नकारात्मक संख्याओं के साथ, उदाहरण के -123लिए योग श्रृंखला (-1 + 1 + 2 + 3)इसके बजाय (-1 + 2 + 3), सही होनी चाहिए ?
यति

@TuukkaX नहीं, यह होना चाहिए -1 + 2 + 3। इस चुनौती के लिए, मैं -/ minus-sign को पहले अंक में एक नकारात्मक अंक के रूप में मर्ज करने के लिए चुनता हूं ताकि यह थोड़ा और दिलचस्प हो सके।
केविन क्रूज़सेन

जवाबों:


10

05AB1E, 28 20 18 8 बाइट्स

ÐgsS'+ýO

व्याख्या

Ð           # triplicate input
 g          # get length of input
  sS'+ý     # split input and merge with '+' as separator 
       O    # sum and implicitly display

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

@ अदनान को 10 बाइट्स से धन्यवाद दिया


2
सौभाग्य से, 05AB1E अंकगणितीय अभिव्यक्तियों पर ऑटो-मूल्यांकन करता है, इसलिए आप ऐसा कर सकते हैं ÐgsS'+ýO:।
अदनान

1
@ अदनान: अच्छा! मुझे नहीं पता था कि यह किया था।
इमीना

13

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

lambda x:x+len(`x`)+eval("+".join(`x`))

परीक्षण सूट

मेरे पायथ-उत्तर के रूप में एक ही स्पष्ट- चाल का उपयोग करना ।


मैंने पायथन का उपयोग कभी नहीं किया, इसलिए अपने संभावित अज्ञान को भूल जाओ, लेकिन नकारात्मक इनपुट के लिए नकारात्मक पहला अंक लेने के लिए कैसे evalऔर क्या joinजानता है? मुझे उम्मीद -123है कि कुछ - + 1 + 2 + 3लिखा होगा, लेकिन जाहिर है कि यह नहीं है .. (या यह है, और यह स्वचालित रूप से दूसरे चरण के रूप में विलय हो गया - + 1है -1?)
केविन क्रूज़सेन

2
आप की तरह @KevinCruijssen कहा -123हो जाता है "-+1+2+3"जो सही परिणाम जब आप पैदावार शामिल होने के बाद evalयह। eval("-+1")उदाहरण के लिए प्रयास करें कि कौन सा परिणाम है -1
डेनकर

1
@KevinCruijssen - + 1-> - 1। यूनीरी प्लस ऑपरेटर मौजूद है, इसलिए - + 1अनिवार्य रूप से उसी के समान है -(+(1))। संख्याओं के लिए +aसमान है a
एर्ग आउटफोलर

9

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

एक बाइट के लिए @LeakyNun को धन्यवाद!

++vj\+`Ql`

परीक्षण सूट

व्याख्या

++ vj \ + `Ql`QQ # Q = इनपुट, अंतिम दो अनुमानित रूप से जोड़े गए

  vj \ + `Q # '+' पर इनपुट को मिलाएं और इसे निकालें
        l`Q # इनपुट की लंबाई
           क्यू # इनपुट खुद
++ # परिणाम प्राप्त करने के लिए उन तीन मान जोड़ें

7

CJam, 18

q_,\~__Ab(@g*\~]:+

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

स्पष्टीकरण:

q_      read the input and make a copy
,\      get the string length and swap with the other copy
~__     evaluate the number and make 2 copies
Ab      convert to base A=10 (array of digits), it uses the absolute value
(       take out the first digit
@g*     get a copy of the number, get its sign and multiply with the digit
\~      dump the other digits on the stack
]:+     add everything together

6

ब्रेकीलॉग , 35 32 बाइट्स

डालूँगा,: एफई +:: एल + मैं, (? 0> ज: 2 *: आईआर: 1 + .; मैं।)
डालूँगा, (? 0> ज: 1 - मैं; ​​I0) ,? ख: एफई +: एल: मैं +?।

व्याख्या

lL,             L is the length of the Input
(
    0>?         Input < 0
       h:1--I   I is (First digit - 1) * -1
;               Or
    I0          I is 0
),
?b:ef+          Sum all digits of the Input
      :?:L:I+.  Output = sum of digits + (Input minus first digit) + L + I

6

XSLT 1.0 (EXSLT के बिना), 673 बाइट्स

<transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0"><output method="text"/><param name="i"/><template match="/"><variable name="d"><variable name="s">0<if test="0>$i">1</if></variable><variable name="d"><call-template name="d"><with-param name="i" select="substring($i,$s+2)"/></call-template></variable><value-of select="substring($i,1,$s+1)+$d"/></variable><value-of select="$i+string-length($i)+$d"/></template><template name="d"><param name="i"/>0<if test="$i!=''"><variable name="d"><call-template name="d"><with-param name="i" select="substring($i,2)"/></call-template></variable><value-of select="substring($i,1,1)+$d"/></if></template></transform>

हल्के से फुलाया:

<transform xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <output method="text"/>
    <param name="i"/>
    <template match="/">
        <variable name="d">
            <variable name="s">0<if test="0&gt;$i">1</if></variable>
            <variable name="d">
                <call-template name="d">
                    <with-param name="i" select="substring($i,$s+2)"/>
                </call-template>
            </variable>
            <value-of select="substring($i,1,$s+1)+$d"/>
        </variable>
        <value-of select="$i+string-length($i)+$d"/>
    </template>
    <template name="d">
        <param name="i"/>0<if test="$i!=''">
            <variable name="d">
                <call-template name="d">
                    <with-param name="i" select="substring($i,2)"/>
                </call-template>
            </variable>
            <value-of select="substring($i,1,1)+$d"/>
        </if>
    </template>
</transform>

Xsltproc का उपयोग करके चलाएं:

xsltproc --param i -87901 ild.xsl ild.xsl

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


1
+1 ऐसी किसी चीज़ का उपयोग करने के लिए जो पूरी तरह से संख्या की गणना करने और वैसे भी काम करने के लिए नहीं है।
DJMcMayhem

क्या आप इसे "अमान्य लेकिन कोडगुल्फ़ के लिए अच्छा" बनाने के लिए कुछ उद्धरण नहीं निकाल सकते?
एर्ग आउटफोलर जूल

name="i" select="..."उदाहरण के लिए, उद्धरण के बाद निश्चित रूप से आपको स्थान की आवश्यकता नहीं है <with-param name="i"select="substring($i,$s+2)"/>?
बिल्ली

@cat पूरे दस्तावेज़ में केवल तीन ही हैं, और वास्तव में जगह को हटाने से xsltproc घुट जाता है।
14:

1
@psmay ओह, यह अजीब है। एरिक कह रहा था कि यदि आप उद्धरणों को हटाते हैं, तो यह तकनीकी रूप से मानक के अनुसार अमान्य हो सकता है लेकिन फिर भी HTML की तरह ठीक से काम कर सकता है, जिनमें से अधिकांश कार्यान्वयन बिना उद्धृत विशेषता मानों के टैग प्रस्तुत करेंगे <p id=hello>आदि। मुझे लगता है कि अगर xsltprocव्हाट्सएप के बारे में परवाह है तो यह बिना पढ़े नहीं रहेगा। द्वारा बातें।
बिल्ली

4

MATL, 20 बाइट्स

tVtnw48-PZ}t0<?x_]vs

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

सभी परीक्षण मामले

व्याख्या

        % Implicitly grab the input
tV      % Duplicate the input and convert to a string
tn      % Duplicate and find the length of this string
w       % Flip the top two stack elements to get us the string again
48-     % Subtract 48 (ASCII 'O'). Yields a negative number for a negative sign
        % and digits otherwise
P       % Flip the resulting array
Z}      % Break the array up so each element is pushed to the stack
t0<?    % If the first character was a negative sign
  x_    % Pop the negative sign off the stack and negate the first digit
]       % End of if
vs      % Vertically concatenate and sum all stack contents
        % Implicitly display the result

4

क्लोजर, 102 बाइट्स

(fn[n](load-string(str"(+ "n" "(count(str n))" "(apply str(map #(if(= % \-)%(str %" "))(str n)))")")))

बेनामी फ़ंक्शन जो एक स्ट्रिंग का निर्माण करता है जो दिखता है (+ -123 4 -1 2 3 )और इसे विकसित करता है। सब कुछ बहुत क्रियात्मक है जैसा कि है, संख्या से स्ट्रिंग का निर्माण, इसकी लंबाई, और फिर संख्या के स्ट्रिंग प्रतिनिधित्व के प्रत्येक प्रतीक को मैप करें सिवाय माइनस के अलावा प्लस स्पेस और माइनस एक ही रहता है

आप इसे यहां देख सकते हैं: https://ideone.com/FG4lsB


4

डायलॉग एपीएल , 19 17 16 बाइट्स

≢+#⍎'\d'⎕R'&+',⊢

स्ट्रिंग और रिटर्न लेता है

लंबाई
+प्लस
# रूट नेम्पस्पेस
मूल्यांकन में
'\d'⎕R'&+'रेगेक्स के अंक एक से अधिक के साथ अनमॉडिफाइड स्ट्रिंग
,द्वारा

-3 ngn के लिए धन्यवाद


3

मैटलैब, 76 67 बाइट्स

n=input('');t=num2str(n)-48;if(n<0)t(1)=0;t(2)=-t(2);end
n+sum(t+1)

9 बाइट्स @Luis मेंडू के लिए धन्यवाद बचा लिया

स्पष्टीकरण:

n=input('');     -- takes input
t=num2str(n)-48; -- makes it a string and then array of digits with "-" becoming -3 (48 is code for 0)
if(n<0)
t(1)=0;          -- set first element (-3) to 0
t(2)=-t(2);      -- the second element is the most significant digit, so we have to negate it
end
n+sum(t+1)       -- take sum of n, sum of all digits and length of t
                    (guaranteed by +1 of every element)

1
sum(t+1)+nसे कम हैsum([n numel(t) t])
लुइस मेंडो

1
वाह, मैंने यह सोचने में कुछ समय बिताया कि यह क्यों काम करता है। बहुत धन्यवाद!
पजाँक

3

डीसी, 57 बाइट्स

dc -e"0 1?rdsc*d[1r]s+d0>+dZr[+la10~lc*rdsaZ1<A]sAdsaZ1<Ala+++f"

व्याख्या की:

0 1      # Push 0, then 1 on the stack
?        # Wait for input from stdin
         # If input is negative, the leading minus will subtract 1 from 0
r        # Swap (rotate) top two items on stack.
         # Stack status if input (`$') was...
         #       positive                    negative
         # TOP       1     <- coefficient ->    -1
         #           $                           $
         #           0
dsc      # Store a copy of coefficient in `c'
*        # Multiply input by coefficient:
         #  If input was positive, it stays positive.
         #  If input was negative, it's actually interpreted as positive.
         #   In this case, multiply by -1 to make it negative.
d        # Duplicate signed input
[1r]s+   # Define a function `+': Push 1 and rotate
d 0>+    # If input is negative, push 1 underneath the top of the stack
         # This 1 represents the length of the `-` in the input
         # Note that the stack now has 3 items on it, regardless of input sign
dZ       # Push the length of the input (not including leading minus)
r        # Rotate, moving a copy of the input to the top
[        # Begin function definition
 +       # Add top two items of stack
 la      # Load value from `a' (which holds nothing at time of function definition)
 10~     # Slice the last digit off `a' (spoiler: `a' is going to hold the input while
         #  we gather its digits)
 lc*     # Multiply digit by coefficient
         #  Since the input is signed, the input modulo 10 will have the same sign.
         #  We want all digits to be positive, except the leftmost digit, which should
         #   have the sign of the input.
         #  This ensures that each digit is positive.
 r       # Rotate: move remaining digits to top of stack
 dsa     # Store a copy of the remaining digits in `a'
 Z 1<A   # Count the number of digits left; if more than 1, execute A
]sA      # Store the function as `A'
d sa     # Store a copy of the input in `a'
         #  Props to you if you're still reading this
Z 1<A    # Count the number of digits left; if more than 1, execute A
la       # Load leftmost digit of input (still signed appropriately)
+++      # Add the top four items on the stack
f        # Dump stack

यह मेरी अपेक्षा से कहीं अधिक जटिल था! अच्छी चुनौती :)


जब तक मेरा दृष्टिकोण समान नहीं था, तब तक मैं आपकी ओर न देख पाने की बात कर रहा था ... लेकिन मैं देख रहा हूं कि आप अपने 10~लिए स्वैप करके बाइट प्राप्त कर सकते हैं A~
ब्रिफल

3

बैश + कोरुटिल्स, 36 बाइट्स

bc<<<$1+${#1}+$(sed s:\\B:+:g<<<0$1)

स्पष्टीकरण:

     $1+                      # the input number (+)
     ${#1}+                   # the length of the number, the '-' sign included (+)
     $(sed s:\\B:+:g<<<0$1)   # insert '+' between two consecutive word characters
                              #A word character is any letter, digit or underscore.
bc<<<                         # calculate the sum

सीड में, \Bलगातार दो गैर-शब्द अक्षरों के बीच भी मेल खाता है, इसलिए एक नकारात्मक संख्या के लिए यह '^' और '-' के बीच मेल खाता है। उदाहरण के लिए, देने के 0$1लिए आवश्यक चाल पर ध्यान दें ।\B0-1+2+3

रन उदाहरण: 'input.txt' में प्रश्न के बयान में सभी परीक्षण मामले शामिल हैं

while read N;do echo "$N -> "$(./ILD_sum.sh "$N");done < input.txt

आउटपुट:

87901 -> 87931
123 -> 132
99 -> 119
5 -> 11
1 -> 3
0 -> 1
-3 -> -4
-99 -> -96
-123 -> -115
-900 -> -905
-87901 -> -87886

@DigitalTrauma जो नकारात्मक पूर्णांक के लिए काम नहीं करेगी।
शेषमारा

@DigitalTrauma खैर, हाँ (लेकिन कोड का आकार नहीं बदलेगा) और नहीं (अगर sed छोड़ दिया गया है तो)। इसका कारण यह है कि एक बैकस्लैश की तुलना में बैकस्टिक्स के साथ कमांड प्रतिस्थापन का उपयोग करते समय एक अलग तरीके से व्यवहार किया जाएगा $()। बैकटिक्स के साथ इसे करने के दो वैकल्पिक तरीके हैं, लेकिन दोनों अंत में एक 36 बाइट्स समाधान देते हैं: sed 's:\B:+:g'<<<0$1और sed s:\\\B:+:g<<<0$1
शीशमारा

2

PowerShell v4, 48 बाइट्स

param($n)$n,"$n".length+[char[]]"$n"-join'+'|iex

यह होना चाहिए v2 + में काम , लेकिन मैंने केवल v4 में परीक्षण किया।

इनपुट लेता है $n,ऑपरेटर के साथ एक नया सरणी बनाता है $nऔर .lengthजब $nस्ट्रिंग को परिवर्तित किया जाता है। इस के साथ कि स्ट्रिंग $nएक चार-सरणी के रूप में डाली जाती है। फिर, उस पूरे सरणी को (इसी तरह ) पाइप करने से पहले -joinएक साथ एड किया जाता है । परिणाम पाइपलाइन पर छोड़ दिया गया है और आउटपुट निहित है।+iexeval

उदाहरण के लिए, इनपुट के लिए, -123सरणी जैसा दिखेगा (-123, 4, -, 1, 2, 3), और स्ट्रिंग के बाद -joinजैसा दिखेगा -123+4+-+1+2+3। तब Invoke-Expressionहोता है, और परिणाम -115उम्मीद के मुताबिक है।


2

फैक्टर load-all, 175 बाइट्स के साथ

खैर, यह बहुत कम नहीं है। यूनीस माइनस की विशेष हैंडलिंग वास्तव में कष्टप्रद है; मुझे लगता है कि मैं इसे बेहतर कर सकता था और मैं करूंगा।

[ dup [ 10 >base length ] [ [ 10 >base >array [ 48 - ] V{ } map-as ] [ 0 < ] bi [ reverse dup pop* dup pop swap [ neg ] dip dup [ push ] dip ] [ ] if 0 [ + ] reduce ] bi + + ]

इस प्रतिस्थापन regex का उपयोग करना:

s/(-?[\d]+)\s*->\s*(-?[\d]+)/{ $2 } [ $1 calculate-ild ] unit-test/g

हम ओपी के परीक्षण मामलों को एक फैक्टर टेस्ट सूट में बदल सकते हैं।

USING: arrays kernel math math.parser sequences ;
IN: sum-ild

: sum-digits ( n -- x )
    [ number>string >array [ 48 - ] V{ } map-as ]
    [ 0 < ]
    bi
    [
      reverse dup pop* dup pop swap [ neg ] dip dup [ push ] dip
    ]
    [ ] if
    0 [ + ] reduce ;

: calculate-ild ( n -- x )
  dup
  [ number>string length ]
  [ sum-digits ]
  bi + + ;

USING: tools.test sum-ild ;
IN: sum-ild.tests

{ 87931 } [ 87901 calculate-ild ] unit-test
{ 132 } [ 123 calculate-ild ] unit-test
{ 119 } [ 99 calculate-ild ] unit-test
{ 11 } [ 5 calculate-ild ] unit-test
{ 3 } [ 1 calculate-ild ] unit-test
{ 1 } [ 0 calculate-ild ] unit-test
{ -4 } [ -3 calculate-ild ] unit-test
{ -115 } [ -123 calculate-ild ] unit-test
{ -905 } [ -900 calculate-ild ] unit-test
{ -87886 } [ -87901 calculate-ild ] unit-test

2

सी #, 118 बाइट्स

int k(int a){var s=a.ToString();for(int i=0;i<s.Length;a+=s[i]<46?-(s[++i]-48)+ ++i-i:(s[i++]-48));return a+s.Length;}

तथ्य यह है कि आप में जगह की जरूरत 1+ ++iपूरी तरह से हास्यास्पद है im
बिल्ली

आप सही हैं, लेकिन मैं यह नहीं जानता कि इसके बिना यह कैसे करना है ...
ScifiDeath

1
आप s[i]<46
क्लिफरोट

क्या आप नहीं कर सकते ++i+1?
निकोल आउटफेलर जूल

@ E @G d नहीं, क्योंकि infix गणित के गूंगा मूल्यांकन का क्रम
बिल्ली

2

SpecBAS - 147 बाइट्स

1 INPUT a$: l=LEN a$: b$="text "+a$+"+"+STR$ l+"+": FOR i=1 TO l: b$=b$+a$(i)+("+" AND i<l): NEXT i: EXECUTE b$

एक तार बनाता है जो फिर चलता है। दुर्भाग्य से शॉर्टहैंड के लिए EXECUTEकाम नहीं करता है , लेकिन 1 चरित्र को बचाया।?PRINTTEXT

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


2

सी #, 106 बाइट्स

मैंने जावा को मेरी बाइट मार दी, मेरा जीवन पूरा हो गया

int r(int n){var s=n+"";return n+s.Length+s.Select((k,j)=>int.Parse(s[k==45?1:j]+"")*(k==45?-2:1)).Sum();}

अनगढ़ (थोड़े)

    public static int r(int n)
    {
            var s = n + "";
            return n + s.Length + s.Select((k, j) =>int.Parse(s[k==45?1:j]+"")*(k==45?-2:1)).Sum();
    }

2
बहुत यकीन है कि आप स्ट्रिंग को var और '-' को 45
ScifiDeath

आप (n)=>{....अनाम लैम्ब्डा के लिए कर सकते हैं
बिल्ली

बिल्ली आप विस्तृत कर सकते हैं? im खुद से यह पता लगाने की कोशिश कर रहा है, लेकिन यह मेरे लिए काम नहीं कर रहा है। मैंने ऐसा कभी नहीं किया
डाउनट्रेप_नेशन

मुझे पता है कि यह एक समय हो गया है, लेकिन आप इसे 89 बाइट्स में गोल्फ कर सकते हैं: n=>n+(n+"").Length+(n+"").Select((k,j)=>int.Parse((n+"")[k<48?1:j]+"")*(k<48?-2:1)).Sum()हालाँकि आपको +18 जोड़ना होगा using System.Linq;जिसके लिए आप अपने वर्तमान उत्तर में भी भूल गए।
केविन क्रूज़सेन

2

जावा 8, 174 136 122 107 105 93 78 बाइट्स

i->{int f=0;for(int j:(i+"").getBytes())i+=j<48?f++:f-->0?50-j:j-47;return i;}

-14 बाइट्स @LeakyNun को धन्यवाद ।
-15 बाइट्स @cliffroot की बदौलत

स्पष्टीकरण:

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

i->{                   // Method with integer as both parameter and return-type
  int f=0;             //  Integer-flag, starting at 0
  for(int j:(i+"").getBytes())
                       //  Loop over the digits as bytes
    i+=                //   Increase the input with:
       j<48?           //    If the current byte is '-':
        f++            //     Increase the input with the flag-integer `f` (which is 0),
                       //     and increase the flag-integer `f` by 1 afterwards
       :               //    Else:
        f-->0?         //     If the flag-integer `f` is 1,
                       //     and decrease the flag-integer `f` back to 0 afterwards
         50-j          //      Increase it with 50 minus the current byte
        :              //    Else
         j-47;         //     Increase it with the byte as digit
                       //      + 1 to cover for the length part in ILD
  return i;}           //  Return the modified input as result

1
int c(int i){char[]c=(i+"").toCharArray();int x=i,l=c.length,s=i+l,j=-1;for(;++j<l;x=1)s+=x>0?c[j]-38:38-c[++j];return s;}
लीक नून

1
int c(int i){char[]c=(i+"").toCharArray();for(int x=i,j=-1;++j<c.length;i+=1+Integer.parseInt(x<0?"-"+--c[j+=x=1]:c[j]+""));return i;}यह अंत में जावा @LeakyNun में गोल्फ की तरह महसूस किया है अपने संस्करण काम करता है? यह पहले गलत उत्तर देता है और फिर क्रैश हो जाता है।
क्लिफरॉट

@LeakyNun आपका कोड परीक्षण के मामले में विफल रहता है 0
केविन क्रूज़सेन

1
ओह, कितना हास्यास्पद है; के दो घटनाओं को बदलने 38के लिए 48
लीक नून

1
int c(int i){byte[]c=(i+"").getBytes();for(int j=-1;++j<c.length;i+=(c[j]<48?50-c[++j]:c[j]-47));return i;}yay
क्लिफरोट

1

पर्ल 6 - 30 बाइट्स

जैसे-जैसे शाब्दिक होता है

{$^a+$^a.chars+[+]($^a.comb)}

एक अनाम फ़ंक्शन के रूप में इसका उपयोग करें

> {$^a+$^a.chars+[+]($^a.comb)}(99)
119 

1

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

n=>eval([n+=``,n.length,...n].join`+`)

पुराने जॉइन-एंड-एवैल ट्रिक का उपयोग करता है। 4 बाइट्स सहेजें अगर मैं स्ट्रिंग इनपुट पर जोर दे सकता हूं:

f=
n=>eval([n,n.length,...n].join`+`)
;
<input type=number oninput=o.value=f(this.value)><input id=o readonly>


"4 बाइट्स जोड़ें यदि मुझे पूर्णांक और स्ट्रिंग्स दोनों को पूर्णांक का प्रतिनिधित्व करने की अनुमति देनी है" तो आप इसे चुनना भी वैकल्पिक नहीं है, लेकिन शायद 99.9% पूर्णांक का चयन करेंगे। मैंने मुख्य रूप से इसे दुर्लभ भाषाओं के लिए जोड़ा है जो केवल तार का समर्थन करती हैं, लेकिन मैं अपने सवाल से उस हिस्से को हटा दूंगा क्योंकि लगभग हर भाषा करती है।
केविन क्रूज़सेन

@ केविनक्रूजसेन पहले अस्पष्ट होने के लिए क्षमा करें; 34-बाइट संस्करण केवल स्ट्रिंग्स पर काम करता है।
नील

1

सी ++, 255 बाइट्स

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main(){
    string input;
    cin >> input;
    int sum = atoi(input.c_str()) + input.length();
    for(unsigned i = 0; i < input.length(); ++i)
        sum += input.at(i) - 48;
    return 0;
}

1

पर्ल 5 - 37 बाइट्स

warn eval(join'+',/./g)+($_+=()=/./g)

इनपुट $ _ में है


1

जावास्क्रिप्ट (बाहरी पुस्तकालय का उपयोग करके) (45 बाइट्स)

एक पुस्तकालय का उपयोग करते हुए मैंने लिंकन को जावास्क्रिप्ट में लाने के लिए लिखा था, मैं निम्नलिखित लिखने में सक्षम था:

(i)=>i+(i+"").length+_.From(i+"").Sum(x=>x|0)

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


1
लाइब्रेरी से लिंक?
चरण

github.com/mvegh1/Enumerable । अभी तक कोई दस्तावेज़ नहीं, क्षमा करें
Applejacks01

1

सी, 132 116 113 80

t,c;f(char*v){for(c=atoi(v+=t=*v==45);*v;t=0,++v)c+=t?50-*v-2*c:*v-47;return c;}

फ़ंक्शन f()इनपुट को एक स्ट्रिंग के रूप में लेता है और परिणाम को पूर्णांक के रूप में देता है। पूर्ण कार्यक्रम संस्करण (113 बाइट्स):

t;main(int c,char**v){char*p=v[1];c=atoi(p+=t=*p==45);for(c=t?-c:c;*p;++p,t=0)c+=t?50-*p:*p-47;printf("%d\n",c);}

एक तर्क की आवश्यकता है।


1

पर्ल, 27 बाइट्स

22 बाइट्स कोड + 5 के लिए -paF

$"="+";$_+=@F+eval"@F"

व्याख्या

-aएक खाली सीमांकक के साथ ऑटोसप्लिट विकल्प का उपयोग करता है ( -F) पास किए गए अंकों की एक सरणी बनाता है। जादू चर का उपयोग करता है $"जो नियंत्रित करता है कि कौन सी वर्ण सरणी में शामिल होने पर एक सरणी में शामिल होने के लिए उपयोग किया जाता है (हम उपयोग करते हैं"+" यहां हैं) और तथ्य यह है कि एक सूची स्केलर संदर्भ में उपयोग की गई सूची की लंबाई (अंकों की संख्या) वापस आ जाएगी।

प्रयोग

echo -n 99 | perl -paF -e'$"="+";$_+=@F+eval"@F"'
119

पर्ल, 27 बाइट्स

22 बाइट्स कोड + 5 के लिए -paF

वैकल्पिक समाधान, यह कोई और अधिक बाइट्स के लिए पठनीय है। मैं अन्य को पसंद करता हूं क्योंकि यह अधिक गूढ़ दिखता है!

$_+=@F+eval join"+",@F

1

डीसी, 56 बाइट्स

?dZrdd1sa[1+r0r-_1sa]sb0>b[A~rd0<x]dsxxrla*[+z1<y]dsyxp

जो के ऊपर से छोटा नहीं है, लेकिन कुछ हद तक अलग कार्यान्वयन (और जो कि नकारात्मक संख्या को इनपुट बनाम घटाव कमांड के रूप में लेता है)। शायद अधिक गोल्फ हो सकता है, लेकिन दोपहर का भोजन केवल इतने लंबे समय तक रहता है।

?                #input
dZrdd            #find no. of digits, rotate to bottom of stack, dup input twice
1sa              #coefficient for first digit stored in register 'a'
[1+r0r-_1sa]sb   #macro 'b' executes on negative numbers. add one (for the neg. sign)
                 #rotate this value out of the way, leave a positive copy on top
0>b              #run the above macro if negative
[A~rd0<x]dsxx    #create and run macro 'x'; mod 10 to grab least significant digit
                 #keep doing it if quotient is greater than zero
rla*             #a zero remains in the way of our most significant digit, rotate it down
                 #and multiply said digit by our coefficient 'a' from earlier
[+z1<y]dsyx      #add two top stack values (we left that zero there to ensure this always
                 #works), check stack depth and keep doing it while there's stack
p                #print!

1

आर, 108 बाइट्स

पार्टी में थोड़ी देर फिर से लेकिन यहाँ यह हो जाता है:

s=strsplit(paste(n<-scan()),"")[[1]];n+nchar(n)+sum(as.integer(if(n<0)c(paste0(s[1],s[2]),s[1:2*-1])else s))

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

यदि चेतावनी संदेशों की अनुमति दी जाती है, तो अपवाद को थोड़ा (96 बाइट्स तक) गोल्फ किया जा सकता है।

s=as.integer(strsplit(paste(n<-scan()),"")[[1]]);if(n<0){s[2]=s[2]*-1;s=s[-1]};n+nchar(n)+sum(s)

इस स्थिति में स्ट्रिंग वेक्टर सीधे पूर्णांक में परिवर्तित हो जाता है as.integer। हालाँकि, ऋणात्मक संख्याओं के लिए वेक्टर में पहला तत्व एक ऋण चिन्ह होगा "-":। यह कुछ परेशानी का कारण बनता है, जैसे: as.numeric(c("-",1,2,3))वापस आ जाएगा NA 1 2 3और एक चेतावनी संदेश। इसे दरकिनार करने के लिए, NA निकालें और फिर -1योग लेने से पहले पहले तत्व को गुणा करें ।


1

RProgN, 30 बाइट्स

] '' . ] '-?.' | sum _ \ L + +

explination

]               # Clone the input
                #
'' . ]          # Convert it to a string, then clone it again.
'-?.' | sum     # Split it into chunks via the pattern '-?.' (A - if there is one, followed by a single character). Sum the resulting array.
_               # Floor the value, purely because I hate floats.
\ L + +         # Swap the top value with the value underneith it, to work with the string again. Get it's length, add the top, middle, and bottom, which is now the length, the sum and the input respectively.

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



1

AWK , 64 63 61 बाइट्स

{s=j=0;for(;j++<n=split($1,a,"");s+=$1>0||j-2?a[j]:-a[j]);$0+=n+s}1

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

TIO लिंक में s=j=0;मल्टी-लाइन इनपुट के लिए 6 अतिरिक्त बाइट्स हैं । यह सबसे छोटी विधि है जिसके साथ मैं आ सकता हूं। मैं उत्सुक हूँ अगर यह कम किया जा सकता है AWK

2-बाइट्स से बचा, धन्यवाद केविन


1
(-2 बाइट्स) $0=n+s+$0को गोल्फ नहीं दिया जा सकता है $0+=n+s?
केविन क्रूज़सेन

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