숫자가 주어지면“집단 합계”를 인쇄하십시오


20

숫자를 입력으로 받으면 집합 합계를 인쇄하십시오.

집단 합계 란 무엇입니까?

숫자 13214, 입력을 고려하십시오

왼쪽부터 시작하여 각 자릿수를 반복하면 집합 합계를 얻을 수 있습니다.

1 첫 번째 숫자를보고 합계에 합을 의미합니다. sum = 1

3 "처음 3 자리"를보고 합계 = 1 + 132에 더합니다.

2 "처음 2 자리"를보고 합계에 합산 함을 의미합니다. sum = 1 + 132 + 13

1 첫 번째 숫자를보고 합계에 더하면 합 = 1 + 132 + 13 + 1

4 "처음 4 자리"를보고 합계 = 1 + 132 + 13 + 1 + 1321에 합산한다는 의미입니다.

총 합계 = 1468그리고 이것은 당신의 출력입니다


특수한 상황들:

우리가을 만나면 0분명히 합계를 동일하게 유지합니다.

The number 1301 would have a sum = 1 + 130 + 1 = 132

입력 길이보다 큰 숫자가 발생하면 모두 더합니다

The number 251 would have a sum = 25 + 251 + 2 = 278

테스트 사례 :

collectiveSum(0) = 0

collectiveSum(2) = 2

collectiveSum(2315) = 23 + 231 + 2 + 2315 = 2571

가장 짧은 바이트 수가 이깁니다. 행복한 골프!


6
이러한 종류의 작업에 대한 질문이 종종 있습니다. 숫자 목록을 입력으로 받아 들일 수 있습니까?
Jonathan Allan

7
2315테스트 케이스가 누락 + 2로부터를 1하고 초래한다 2571.
Jonathan Allan

0부터 0으로 시작하는 입력을 처리해야합니까? 프로그램은 이러한 입력을 어떻게 처리해야합니까
fəˈnɛtɪk

마지막 테스트 사례가 잘못된 것 같습니다. 이어야합니다 2571.
얽히고 설킨

입력이 정수 목록이 아닌 숫자 여야하는 이유를 알 수 없습니다. 불필요하게 번거로운 입력 형식처럼 보입니다.
밀 마법사

답변:


7

05AB1E ,  4  3 바이트

케빈 Cruijssen (사용 -1 덕분 회피 })

€£O

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

방법?

€£O - implicit input   e.g. 2315
€   - map with:
 £  -   head to             23, 231, 2, 2315
  O - sum                   2571

13초 나를 이길 XD
매직 문어 항아리를

다행이 나는 링크를 바이트에 추가하기를 기다렸다 : p
Jonathan Allan

ε£}€£바이트를 저장할 수 있습니다 .
Kevin Cruijssen

@KevinCruijssen은 이것을 만들 때도 옵션 이었습니까?
조나단 앨런

@JonathanAllan 완전히 확실하지는 않지만 실제로는 이미 생각합니다. Adnan 은 2018 년 여름 (8 월에 출시 된)에 Elixir 재 작성을 작성하기 시작 했으며 그 전에는 기존 버전의 05AB1E에 이미 꽤 오래있었습니다. 2018 년 4 월에 첫 05AB1E 답변을 게시했을 때 이미 거기에있었습니다. 따라서이 답변을 게시 한 직후에 추가되었을 수도 있지만 확실하지 않습니다.
Kevin Cruijssen

5

파이썬 2 , 43 바이트

lambda n:sum(int('0'+n[:int(x)])for x in n)

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


불행히도 이것은의 ValueError입력 1301또는 숫자 중 하나가 0 인 입력을 발생 시키는 것으로 보입니다 .
mathmandan

@mathmandan 지금 고쳐야합니까?
ASCII 전용

int함수는 정수를 받아 들여 '0'문자열 리터럴을 01 바이트 만 제거 하면됩니다.
MooseOnTheRocks

@MooseOnTheRocks 어리석지 않고 무언가를 엉망으로 만들지 않는 한 (보통) 엉망이 아닌 것처럼 보이지만 해커처럼 보이지만 (?)
ASCII 전용

4

파이썬 2, 72 바이트

첫 제출! 도움을 주신 @DestructibleLemon에게 감사합니다!

import sys;d=sys.argv[1];s=0;for e in d:s+=int(d[:int(e)]);print str(s)

아시다시피, 귀하의 게시물 헤더를 편집 할 때 커뮤니티 사용자 가 downvote를 자동으로 제공 한 것으로 보입니다 . 죄송합니다. 성 가시고, 무의미한 기능 입니다. 나는 그것이 왜 그렇게했는지 알지 못하지만, 내가 알 수있는 한, 이것은 품질이 낮은 것으로 표시 되지 않았습니다 .
Steadybox

PPCG에 오신 것을 환영합니다! 좋은 첫 제출! 그리고 Steadybox가 말했듯이 downvote는 특별한 이유없이 자동으로 배치되었습니다. 귀하의 게시물에 몇 개의
공감대가 생겼으므로

3

하스켈, 43 37 바이트

f l=sum[read$'0':take(read[d])l|d<-l]

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

입력 번호는 문자열로 사용됩니다.

   [        |d<-l]      -- for every digit d in the input string
        read[d]         -- convert to a number
      take     l        -- and take that many digits from l
     0:                 -- prepend a 0 (to handle 0s)
   read                 -- convert to a number
sum                     -- sum all numbers

3

루비 , 36 바이트

->n{n.sum{|x|n[0,x.to_i].join.to_i}}

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


#sumfixnums에 정의되어 있지 않으므로 n문자열 이 되고 싶다고 가정 합니다. 그러나 String#suma를 계산하고 not a particularly good checksum지정한 블록을 무시합니다. 당신이 의미하는 경우 n.chars.sum{, Enumerable#sum그것은 레일에 의해 제공되는 확장이다, 루비 다음 stdlib에 있지 않습니다. 게시하기 전에 솔루션을 테스트하십시오.
Shelvacu

@Shelvacu 그래, 나는 배열로 입력을 받고있다 ... 바닥 글을 참조하십시오. Plus Enumerable#sum는 Ruby 2.4 이며 TIO는 2.4
ASCII 전용을 사용합니다.

숫자 배열을 입력으로 사용하는 경우 31 바이트
Asone Tuhid

@AsoneTuhid 나는 그것이 유효한 입력 형식이라고 생각하지 않습니다. 만약 당신이 다른 증거를 발견한다면 설명하십시오
ASCII-only

이 페이지 는 문제를 해결하지는 않지만 정수 목록이 문자 목록과 너무 다른 것으로 보지 않습니다 (답변은 입력으로 사용됩니다)
Asone Tuhid

3

자바 스크립트, 42 40 바이트

2 바이트를 골라 낸 @Shaggy에게 감사합니다.

f=
x=>[...x].map(y=>a+=+x.slice(0,y),a=0)|a

console.log(f("2315"))
console.log(f("0100"))
console.log(f("2"))
console.log(f("01025"))

입력을 문자열로 받아서 정수를 반환합니다. 현재 작성된 바와 같이,이 코드는 모든 정수에서 선행 0을 남깁니다.


40 바이트 :x=>[...x].map(y=>a+=+x.slice(0,y),a=0)|a
Shaggy

3

R, 57 바이트

@Vlo 덕분에 하나 더 절약

sum(strtoi(substring(i<-scan(,""),1,el(strsplit(i,"")))))

@Robert Hacken의 제안으로 4 바이트를 절약했습니다.

i=scan(,"");sum(strtoi(substring(i,1,el(strsplit(i,"")))))

간단한 문자열 접근 방식.


1
로 교체 unlist하여 4 바이트를 절약 할 수 있습니다 el.
Robert Hacken

1
인라인 할당으로 1 저장sum(strtoi(substring(i<-scan(,""),1,el(strsplit(i,"")))))
Vlo


2

, 10 바이트

IΣIEθ✂θ⁰Iι

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

   Eθ       Map over input string
        Iι  Cast current character to integer
     ✂θ⁰    Slice input string to that length
 ΣI         Cast slices to integer and take the sum
I           Cast result to string and implicitly print

하하, 정확히 똑같은 일이있었습니다
ASCII-only

2

옥타브 , 56 바이트

@(n)sum(str2num(['' 32+char(n.*(find(n)<=(n'-48))-32)]))

문자열을 입력 인수로 사용하고 숫자를 출력으로 반환하는 익명 함수.

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

더 짧은 버전

@(n)sum(str2num(['' char(n.*(find(n)<=(n'-48)))]))

char(0)공간으로 취급 되기 때문에 Matlab에서 작동 합니다.


2

젤리 ,  7  5 바이트

Dennis 덕분에 -2 (헤드 벡터화>. <)

우리가 숫자 목록을 취할 수 있다면 4 *

Dḣ`ḌS

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

* ḣ`ḌS

방법?

Dḣ`ḌS - Link: integer, n   e.g. 2315
D     - to decimal list         [2,3,1,5]
  `   - repeat left as right    [2,3,1,5]
 ḣ    - head                    [2,3], [2,3,1], [2], [2,3,1,5]
   Ḍ  - from decimal lists      23, 231, 2, 2315
    S - sum                     2571

2

펄 6 , 27 바이트

{sum $_ X[&substr]^«.comb}

그것을 테스트

넓히는:

{  # bare block lambda with implicit param 「$_」

  sum

    $_           # the input

      X[&substr] # crossed using &substr sub as if it was an infix operator

    \          # upto 「^」 for each of the following 「«」 (creates Range objects)
    .comb        # the input split into digits (implicit method call on 「$_」
}



1

껍질 , 6 바이트

ṁd´M↑d

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

설명

ṁd´M↑d  -- example input: 1301
     d  -- decimal digits: [1,3,0,1]
  ´M    -- map over it using it as argument (example with 3):
    ↑   -- | take: [1,3,0]
        -- : [[1],[1,3,0],[],[1]]
ṁ       -- map and then sum the result (example on [1,3,0]):
 d      -- | as decimal: 130
        -- : 1 + 130 + 0 + 1 = 132


1

apt, 5 바이트

입력을 문자열로받습니다.

¬x@¯X

시도 해봐


설명

          :Implicit input of integer string U
¬         :Split to an array of characters/digits
  @       :Pass each X through a function
   ¯X     :Slice U from the first to the Xth character
 x        :Reduce by addition

O_o Japt가 실제로 골프를 타거나 실제로 잘못하고 있습니다
ASCII 전용

2
@ASCII 전용 : Japt는 대부분의 사람들이 생각하는 것보다 훨씬 "골프"입니다. 우리 는 최근의 아스키 아트 챌린지 에서 차콜 SOGL을 꺾고 도전의 공평한 점유율을 차지 했습니다.
얽히고 설킨

@Shaggy 물론,하지만 나는 그것을 젤리 / 사실 / 05AB1E 수준 golfy 몰랐어요
ASCII 전용

@ ASCII-only : 아, 그래요. 그들과 잘 어울리 네요. :) 관심이 있으시면,이 달의 언어를 살펴보십시오. 또는 Japt 대화방에 언제든지 들어가면 투어가 제공됩니다.
얽히고 설킨

1

Stax , 6 바이트

ç╫&º±å

온라인으로 실행 및 디버깅

동일한 프로그램의 해당 ASCII 표현은 이렇습니다.

EZFy(e+

E        get array of digits
 Z       push 0 under array of digits
  F      for each digit, run the rest of the program
   y     input as a string
    (    get start of string for specified number of characters
     e   evaluate substring as integer
      +  add

0

실제로 10 바이트

╝ß⌠≈╛H≈⌡MΣ

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

설명

╝          Push input to register 1
 ß         Push n-th input (0 by default)
        M  Map
  ⌠    ⌡   Function
   ≈       Cast current character of input to int
    ╛      Get value of register 1 (input)
     H     Push input[:current character]
      ≈    Cast to int
         Σ Sum


0

펄 5, 26 바이트

포함 +1을 위해p

perl -pE 's%.%/.{0,$&}/;$\+=$&%eg}{' <<< 2315; echo

0

K4 , 22 바이트

해결책:

+/10/:'(x&#x)#\:x:10\:

예 :

q)k)+/10/:'(x&#x)#\:x:10\:13214
1468
q)k)+/10/:'(x&#x)#\:x:10\:1301
132
q)k)+/10/:'(x&#x)#\:x:10\:251
278
q)k)+/10/:'(x&#x)#\:x:10\:2315
2571

설명:

10 진수로 나누고 각 숫자의 최소값과 목록 길이를 여기에서 가져옵니다. 다시 변환하고 요약하십시오.

+/10/:'(x&#x)#\:x:10\: / the solution
                  10\: / to base 10, 123 => 1 2 3
                x:     / save as x
             #\:       / take (#) each left
       (    )          / the left
          #x           / count (#) length of x
        x&             / min of x and the length
  10/:'                / from base 10 each
+/                     / sum up the results

0

자바 8, 92 바이트

n->n.chars().map(c->(c-=48)>0?new Integer(n.substring(0,c<n.length()?c:n.length())):0).sum()

설명:

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

n->                                  // Method with String parameter and int return-type
  n.chars()                          //  Loop over the characters
   .map(c->(c-=48)                   //   Convert character to digit
        >0?                          //    And if it's larger than 0
         new Integer(n.substring(0,  //     Take the first `x` digits, where `x` is:
          c<n.length()?              //      If the digit higher than the total a.o. digits
           c                         //       Take the first `c` digits
          :                          //      Else:
           n.length()))              //       Take all digits
         :                           //    Else:
          0)                         //     Take 0
   .sum()                            //   And sum everything

0

REXX 118 바이트

pull n                           
l=length(n)                      
a=0                              
j=1                              
do while (j<=l)                  
if substr(n,j,1)==0 then m=0;    
else m=substr(n,1,substr(n,j,1));
a=a+m                            
j=j+1                            
end                              
say a                                 

여기를보십시오
표준 입력 탭에서 입력 값을 제공합니다.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.