이 두 숫자를 몇 개 더해야합니까?


27

태스크

두 개의 양의 정수가 주어지면 밑 10에서 더하기에 함께 더하기 위해 필요한 캐리 수를 출력하십시오.

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

3 개의 운반이 필요합니다.

 ¹
 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(캐리에 휴식이 있음).
Jonathan Allan

5
에서 @Jenny_mathy의 답 : 운반의 수 (1) 두 입력의 숫자 합계의 합 (2) 구에 의해 분할 된 두 입력의 합계의 자릿수의 합계 사이의 차이와 동일하다. 캐리가있을 때 10을 빼고 숫자 합계에 1을 더하기 때문입니다. 예를 들어,을 9+9제공 18하지만 숫자 합은 9+9-10+1캐리 가 있기 때문입니다.
JungHwan Min


우리가 숫자를 우리 언어의 int 타입에 맞다고 생각할 수 있습니까? 특히 Python 2의 경우 위 reprLfor 숫자 를 추가 해야 2**63-1합니까?
xnor

답변:


21

매스 매 티카, 46 39 바이트

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

입력

[348,51]

JungHwan에서 -7 바이트


Dang, 나는이 방법을 정말로 좋아한다. (1) 두 입력의 숫자 합계의 합과 (2) 두 입력의 합계의 자릿수 간 차이는 캐리 수의 9 배입니다. 캐리가있을 때 캐리에서 10을 빼기 때문에 숫자 합계와 숫자 합계에 1을 더합니다.
JungHwan Min

나도! 골프 팁 주셔서 감사합니다
J42161217

테스트 사례에 따르면 [348,51]은 0을 반환해야하지만 이것을 실행하면 56/3이 나타납니다 ...?
numbermaniac

웰프, 지금 작동하는 것 같습니다. Mathematica가 이전에 무엇을했는지 잘 모르겠습니다 ...
numbermaniac

6

자바 스크립트 (ES6), 50 바이트

ovs의 솔루션 에서 도난당한 고정

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
토토에게

이것은 어떻게 작동합니까? 설명을 추가해 주시겠습니까?
Arjun

5

C (gcc) , 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 초기화하지 않고 함수 내에서 사용하는 경우 필요합니다.
Leaky Nun

1
여기에서 초기화에 대해 머리 를 댄 것 : 변수 자동으로 0으로 초기화되지만 한 번만 수행되므로 PPCG에서 함수 제출은 함수가 두 번 이상 실행될 경우 작동해야하므로 두 번째의 이점을 위해 수동으로 제로화해야합니다 그리고 후속 실행.

5

젤리 ,  13 12 11  9 바이트

Jenny_mathy의 수학 답변 을 포팅하여 -1 바이트 .
더 나은 골프를 통해 -2 바이트 더 : p

;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

많은 용도 DS...
에릭 아웃 골퍼

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 바이트 변형 플로트 ab대신 다운 시프트

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

슬프게도 float 정밀도 문제가 발생합니다.


a+b<m종료 조건으로 사용할 수 없습니까 ?
Neil

@Neil <=더 길어야합니다.
xnor

1e99and불쾌합니다.
Jonas Schäfer 2016 년

4

자바 스크립트 (ES6), 53 45 바이트

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

별도의 수행 할 작업을 추가하여 1 바이트를 절약했습니다. @xnor의 캐리 검사를 적절히 적용하여 7 바이트를 절약했습니다. 나는 또한 더 우아한 45 바이트 버전을 가지고 있었지만 부동 소수점 부정확성으로 고통받습니다. 정확한 십진 산술로 언어로 번역하면 훌륭하게 작동합니다.

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



2

Neim , 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)

시도 해봐!



0

Braingolf , 20 바이트

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

온라인으로 사용해보십시오!

다른 사람과 동일한 방법을 사용합니다.

바이트를 저장하거나이 내가 허용하는 선견지명이 있었다 했어 수 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.