इन दो नंबरों को जोड़ने के लिए मुझे कितने कैरी की आवश्यकता होगी?


27

कार्य

दो सकारात्मक पूर्णांकों को देखते हुए, उन्हें आधार 10 में लंबे समय तक जोड़ने के लिए आवश्यक कैर्री की संख्या को आउटपुट करता है।

उदाहरण

¹¹¹   <-- carries
 999
+  1
----
1000

तीन गाड़ियां चाहिए।

 ¹
 348
+ 91
----
 439

एक कैरी की जरूरत है।

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

999,   1 -> 3
398,  91 -> 1
348,  51 -> 0
348,  52 -> 2
  5,  15 -> 1
999, 999 -> 3
505, 505 -> 2

स्कोरिंग

यह । बाइट्स जीत में सबसे छोटा जवाब। मानक खामियां लागू होती हैं।



14
सुझाया गया परीक्षण मामला: 190192, 90909(कैर्री में विराम है)।
जोनाथन एलन

5
से @Jenny_mathy के जवाब : किया जाता है की संख्या (1) दो आदानों की अंकों योग का योग और (2) दो आदानों की राशि, नौ से विभाजित अंकों राशि के बीच अंतर के बराबर है। ऐसा इसलिए है क्योंकि जब कोई कैरी होता है, तो आप 10 को घटाते हैं और 1 को अंक जोड़ते हैं। उदाहरण के लिए, 9+9आपको देता है 18, लेकिन अंकों का योग है 9+9-10+1क्योंकि एक कैरी है।
जुंगह्वान मिन


क्या हम संख्याओं को अपनी भाषा के इंट प्रकार में फिट मान सकते हैं? विशेष रूप से पायथन 2 के लिए, क्या हमें उपरोक्त संख्याओं के लिए reprआवेदन करना चाहिए ? L2**63-1
xnor

जवाबों:


21

गणितज्ञ, ४६ ३ ९ बाइट्स

x=Tr@*IntegerDigits;(x@#+x@#2-x@+##)/9&

इनपुट

[348,51]

-जंगहवन से 7 बाइट्स


डांग, मुझे वास्तव में यह तरीका पसंद है। दो इनपुटों के अंकों के योग का अंतर (1) और (2) दो इनपुटों के योग का अंकों का योग, कैर्री की संख्या का नौ गुना है क्योंकि जब कोई ले जाता है, तो आप 10 को घटाते हैं। अंकों का योग और अंकों के योग में 1 जोड़ें।
जंगवान मिन

मैं भी! गोल्फ युक्तियाँ के लिए धन्यवाद
14:42 पर J42161217

Testcases का कहना है [348,51] 0 वापस आना चाहिए लेकिन जब मैं इसे चलाता हूं तो मुझे 56/3 मिल रहा है ...?
नंबरमान

वेल्ड, ऐसा लगता है कि यह अब काम कर रहा है। यकीन नहीं होता कि इससे पहले मैथेमेटिका क्या कर रही थी ...
नंबरमैन

6

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

ओवस के समाधान से फिक्स्ड स्टोल

f=(a,b,c=0)=>a|b|c&&c+f(a/10,b/10,a%10+b%10+c>=10)

व्याख्या

f=(a,b,c=0)=>                                      Function taking two numbers and optional carry
             a|b|c                                 If a number or the carry are nonzero
                  &&                               Then
                    c+f(a/10,b/10,a%10+b%10+c>=10) Return carry plus all other carries

स्पष्टीकरण ले

a%10+b%10+c     Sum of mod 10 of the numbers and c - remember these are not floordiv'ed
           >=10 Greater than or equals to 10 (we can't use greater than 9 here)

f=(a,b,c=0)=>a|b|c&&c+f(a/10,b/10,a%10+b%10+c>=10)
console.log([[999,1],[398,91],[348,51],[348,52],[5,15],[999,999],[256,64],[190192,90909]].map(test=>`${(test[0]+'').padStart(6,' ')}, ${(test[1]+'').padStart(6,' ')} -> ${f(...test)}`).join('\n'));


1
348 , 52होना चाहिए2
टोटो

यह कैसे काम करता है? क्या आप एक स्पष्टीकरण जोड़ सकते हैं?
अर्जुन

5

सी (जीसीसी) , 65 बाइट्स

i,l;f(a,b){for(i=l=0;a+b;a/=10,b/=10)i+=a%10+b%10+l>9?l=1:0;a=i;}

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


आपको वैश्विक चर को इनिशियलाइज़ करने की आवश्यकता नहीं है।
user1502040

@ user1502040 की जरूरत है, अगर वे बिना आरंभ किए फंक्शन के अंदर उपयोग किए जाते हैं।
लीक नून

1
बस प्रारंभ यहाँ मेरे सिर हो रही: चर रहे हैं स्वचालित रूप से शून्य से आरंभ नहीं है, लेकिन केवल एक बार, तो PPCG पर समारोह प्रस्तुतियाँ काम करने के लिए है क्योंकि समारोह की दौड़ एक बार से अधिक, वे मैन्युअल रूप से दूसरे के लाभ के लिए ध्यान केंद्रित किया जा करने की आवश्यकता है और बाद में चलता है।

5

जेली ,  13 12 11  9 बाइट्स

जेनी_मैथी के गणित के उत्तर को चित्रित करके -1 बाइट ।
बेहतर गोल्फिंग द्वारा -2 अधिक बाइट्स: पी

;SN$DFS:9

परीक्षण सूट देखें

कैसे?

;SN$DFS:9 - Main link: list of numbers, [a,b]     e.g.   [348,53]
   $      - last two links as a monad
 S        -   sum                                            401
  N       -   negate                                        -401
;         - concatenate                             [348,53,-401] 
    D     - convert to decimal lists     [[3,4,8],[5,3],[-4,0,-1]]
     F    - flatten                           [3,4,8,5,3,-4,0,-1]
      S   - sum                                               18
       :9 - integer divide by nine                             2

मेरा 12 बाइट समाधान ...

:⁵+
DUSç\>9S

एक मोनडिक लिंक पूर्णांक की एक जोड़ी ले रहा है और एक पूर्णांक के रूप में कैर्री की संख्या वापस कर रहा है।

हालांकि एक छोटा रास्ता है! वहां था!

इसे ऑनलाइन आज़माएं! या परीक्षण सूट देखें।

किस तरह

:⁵+ · Link 1: perform a carry: right-column's-digit-sum, a; left-colum's-digit-sum; b
 ⁵  · literal 10
:   · a integer-divided by 10 - the carry amount
  + · add to b

DUSç\>9S · Main link: list of summands        e.g. [348,52]
D        · convert to decimal lists                [[3,4,8],[5,2]]
 U       · upend (reverse each)                    [[8,4,3],[2,5]]
  S      · sum (add the digits up)                 [10,9,3]
    \    · cumulative reduce with:
   ç     ·   last link (1) as a dyad               [10,10,4]
      9  · literal 9
     >   · greater than?                           [ 1, 1,0]
       S · sum                                     2

के कई उपयोग Dऔर S...
एरिक द आउटगलर

4

पायथन , 48 बाइट्स

f=lambda a,b,m=1:m<1e99and(~a%m<b%m)+f(a,b,m*10)

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

प्रत्येक स्थान मान के लिए m=1, 10, 100, ..., 10**99, जाँचता है कि क्या उस स्थान पर कोई मूल्य है। ओवरफ्लो चेक a%m+b%m>=mको छोटा कर दिया जाता है ~a%m<b%m

एक अच्छा - खासा 45-बाइट संस्करण जहां तैरता है aऔर bइसके बजाय नीचे स्थानांतरित हो जाता है

f=lambda a,b:a+b and(a%1+b%1>=1)+f(a/10,b/10)

उदासी फ्लोट सटीक मुद्दों में चलती है।


क्या आप a+b<mअपनी समाप्ति स्थिति के रूप में उपयोग नहीं कर सकते ?
नील

@ नील को यह होना चाहिए <=जो लंबा हो।
xnor

1e99andबुरा है।
जोनास श्‍फर

4

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

f=(a,b,d=1)=>a+b<d?0:(a%d+b%d>=d)+f(a,b,d*10)

1 बाइट को 1 के स्थान पर ले जाने के लिए एक अतिरिक्त डू-नथिंग पुनरावृत्ति जोड़कर सहेजा गया। @ Xnor के कैरी चेक को विनियोजित करके 7 बाइट्स की बचत की। मेरे पास एक और अधिक सुरुचिपूर्ण 45-बाइट संस्करण था, लेकिन यह फ्लोटिंग-पॉइंट अशुद्धि से ग्रस्त है; यह सटीक दशमलव अंकगणित के साथ एक भाषा में अनुवादित महान काम करेगा:

f=(a,b,c=a+b)=>c<1?0:a%1+b%1-c%1+f(a/10,b/10)

3

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

f=lambda a,b,c=0:c+a+b and c+f(a/10,b/10,a%10+b%10+c>9)

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


1
जैसा कि @JonathanAllan ने बताया, यदि आपने अपने फ़ंक्शन के लिए कॉल का उपयोग किया है, तो आपको इसे भी घोषित करना होगा। कहा जा रहा है कि, आपका उत्तर 55 बाइट्स है
श्री एक्सकोडर

@ Mr.Xcoder यह तय
OVS


2

नीम , 10 बाइट्स

𝔸𝐣𝐬₁₂𝔻𝐬𝕊λ𝕍

स्पष्टीकरण:

𝔸            𝔸ppend the two inputs into a list
 𝐣            𝐣oin them together
  𝐬           𝐬um the characters
   ₁₂         Push the first input, then the second
     𝔻        A𝔻d.
      𝐬       𝐬um the characters
       𝕊      𝕊ubtract
         𝕍    Integer di𝕍ision by
        λ     nine (variable)

कोशिश करो!

वैकल्पिक समाधान, 10 बाइट्स:

𝔸D𝐣𝐬S𝐬𝐬𝕊9𝕍

स्पष्टीकरण:

𝔸             𝔸ppend the two inputs into a list
 D            Duplicate
  𝐣            𝐣oin
   𝐬           𝐬um
    S          Swap
     𝐬         𝐬um
      𝐬        𝐬um the characters
       𝕊       𝕊ubtract
         𝕍     integer di𝕍ide by
        λ       nine (variable)

कोशिश करो!


1

PHP> = 7.1, 81 बाइट्स

for([,$x,$y]=$argv,$i=1;($x+$y)/$i|0;$i*=10)$d+=$c=$x/$i%10+$y/$i%10+$c>9;echo$d;

-2 बाइट्स हटाना |0इस मामले में जब तक लूप चलता $iहैINF

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


कब $iबनता है INF?
बिल्ली

@ मुझे यकीन नहीं है कि यह महत्वपूर्ण क्यों है। मैंने इसका उपयोग नहीं किया है। 1.0E+309पहला INFमूल्य है इसे ऑनलाइन आज़माएं!
जार्ज ह्यूल्सरमैन

0

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

VR{.M}d<d&+v+d&+c-9/

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

सभी के समान ही विधि का उपयोग करता है।

एक बाइट सहेज कर रखा है कर सके या 2 मैं दूरदर्शिता थी अनुमति देने के लिए किया था dतो मैं बदल दिया है सकता है लालची संशोधक का उपयोग करने के लिए, d<dके साथ &dअगली बार आह ठीक है,।

व्याख्या

VR{.M}d<d&+v+d&+c-9/  Implicit input from commandline args
VR                    Create stack2 and return to stack1
  {..}                Foreach loop, runs on each item in stack1
   .M                 Duplicate and move duplicate to stack2
      d<d             Split both items on stack into digits
         &+           Sum entire stack
           v+         Switch to stack2 and sum last 2 items on stack
             d&+      Split result into digits and sum all digits
                c     Collapse stack2 into stack1
                 -    Subtract last item from 2nd to last
                  9/  Divide by 9
                      Implicit output of last item on stack
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.