Cho một số, in ra tổng cộng tập hợp của nó


20

Cho một số làm đầu vào, in ra tổng hợp của nó

Tổng hợp là gì?

Xem xét số lượng 13214, đầu vào

Vòng qua từng chữ số bắt đầu từ bên trái, chúng ta sẽ có thể có được tổng số của nó.

1 nghĩa là nhìn vào chữ số đầu tiên và thêm nó vào tổng, sum = 1

3 nghĩa là nhìn vào "3 chữ số đầu tiên" và thêm nó vào tổng, sum = 1 + 132

2 nghĩa là nhìn vào "2 chữ số đầu tiên" và thêm nó vào tổng, sum = 1 + 132 + 13

1 nghĩa là nhìn vào chữ số đầu tiên và thêm nó vào tổng, sum = 1 + 132 + 13 + 1

4 nghĩa là nhìn vào "4 chữ số đầu tiên" và thêm nó vào tổng, sum = 1 + 132 + 13 + 1 + 1321

Tổng cộng = 1468và đây là đầu ra của bạn


Trường hợp đặc biệt:

Nếu chúng ta gặp a 0, thì rõ ràng chúng ta giữ tổng như cũ

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

Nếu chúng ta gặp một số lớn hơn độ dài của đầu vào, chúng ta sẽ thêm tất cả

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

Các trường hợp thử nghiệm:

collectiveSum(0) = 0

collectiveSum(2) = 2

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

Số lượng byte ngắn nhất sẽ thắng. Chúc bạn chơi golf vui vẻ!


6
Như thường là một câu hỏi với các loại nhiệm vụ này: Chúng tôi có thể chấp nhận một danh sách các chữ số làm đầu vào của chúng tôi không?
Jonathan Allan

7
Các 2315trường hợp thử nghiệm bị thiếu + 2từ 1và nên dẫn đến 2571.
Jonathan Allan

Chúng ta có hy vọng sẽ phải đối phó với các đầu vào bắt đầu bằng 0 ngoài 0 không? Chương trình nên đối phó với những đầu vào này như thế nào
fəˈnɛtɪk

Có vẻ như trường hợp thử nghiệm cuối cùng là sai; nên 2571.
Xù xì

Tôi không thấy lý do tại sao đầu vào phải là một số chứ không phải là một danh sách các số nguyên. Nó có vẻ như một hình thức đầu vào rườm rà không cần thiết.
Thuật sĩ lúa mì

Câu trả lời:


7

05AB1E ,  4  3 byte

-1 nhờ Kevin Cruijssen (sử dụng để tránh a })

€£O

Hãy thử trực tuyến!

Làm sao?

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

Đánh bại tôi sau 13 giây xD
Bạch tuộc ma thuật Urn

Vui mừng tôi đã chờ để thêm liên kết vào byte sau đó: p
Jonathan Allan

ε£}có thể €£để lưu một byte.
Kevin Cruijssen

@KevinCruijssen đó cũng là một lựa chọn khi tôi tạo cái này?
Jonathan Allan

@Jonathan ALLan Không hoàn toàn chắc chắn, nhưng tôi nghĩ nó thực sự đã có. Adnan bắt đầu viết lại Elixir vào mùa hè năm 2018 (được phát hành vào tháng 8), và đã ở đó khá lâu trong phiên bản kế thừa của 05AB1E trước đó. Nó đã ở đó khi tôi đăng câu trả lời 05AB1E đầu tiên của mình vào tháng 4 năm 2018. Vì vậy, có thể nó đã được thêm vào ngay sau khi bạn đăng câu trả lời này, nhưng tôi không chắc chắn.
Kevin Cruijssen

5

Con trăn 2 , 43 byte

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

Hãy thử trực tuyến!


Thật không may, điều này dường như tăng một ValueErrorđầu vào cho 1301, hoặc bất kỳ đầu vào nào có số 0 là một trong các chữ số của nó.
mathmandan

@mathmandan Có nên sửa bây giờ không?
ASCII chỉ

Các intchức năng có thể chấp nhận một số nguyên, thay thế các '0'chuỗi chữ với chỉ 0nên cạo một byte.
MooseOnTheRocks

@MooseOnTheRocks Đã làm theo cách có vẻ ít hack (?) Với tôi, trừ khi tôi ngu ngốc và làm hỏng điều gì đó (thông thường)
ASCII chỉ có

4

Python 2, 72 byte

Trình đầu tiên! Cảm ơn @DeststallibleLemon vì sự giúp đỡ!

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

Chỉ để bạn biết, downvote dường như được cung cấp tự động bởi người dùng cộng đồng khi tôi chỉnh sửa tiêu đề của bài viết của bạn. Lấy làm tiếc. Đó là một tính năng gây phiền nhiễu, vô nghĩa . Mặc dù tôi không biết tại sao nó lại làm như vậy vào lúc này, bởi vì theo như tôi có thể nói, thì điều này không được đánh dấu là chất lượng thấp.
Steadybox

Chào mừng đến với PPCG! Đẹp đầu tiên nộp! Và vâng, như Steadybox đã nói, downvote được tự động đặt mà không có lý do chính đáng nào. Bài đăng của bạn đã nhận được một vài lượt upvote, vì vậy, hy vọng ở công việc định kỳ tiếp theo, downvote tự động sẽ bị xóa :)
HyperNeutrino

3

Haskell, 43 37 byte

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

Hãy thử trực tuyến!

Số đầu vào được lấy dưới dạng chuỗi.

   [        |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

Ruby , 36 byte

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

Hãy thử trực tuyến!


#sumkhông được xác định trên fixnums, vì vậy tôi giả sử bạn muốn ntrở thành một chuỗi. Tuy nhiên, String#sumtính a not a particularly good checksumvà bỏ qua khối bạn đưa ra. Nếu bạn muốn nói n.chars.sum{, Enumerable#sumkhông phải trong stdlib ruby, đó là một phần mở rộng được cung cấp bởi đường ray. Vui lòng kiểm tra giải pháp của bạn trước khi đăng chúng.
Shelvacu

@Shelvacu Vâng, tôi đang lấy đầu vào dưới dạng một mảng mặc dù ... xem phần chân trang được cung cấp. Plus Enumerable#sumlà trong Ruby 2.4TIO sử dụng 2.4
ASCII - chỉ

31 byte nếu bạn lấy một mảng các chữ số làm đầu vào
Asone Tuhid

@AsoneTuhid Tôi không nghĩ đó là một hình thức đầu vào hợp lệ, nếu bạn tìm thấy bằng chứng nếu không, vui lòng giải thích
ASCII chỉ

Trang này dường như không giải quyết được vấn đề nhưng tôi không thấy danh sách các số nguyên quá khác biệt với danh sách các ký tự (đó là câu trả lời của bạn làm đầu vào)
Asone Tuhid

3

JavaScript, 42 40 byte

Cảm ơn @Shaggy đã chơi golf 2 byte

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"))

Nhận đầu vào dưới dạng một chuỗi và trả về một số nguyên. Như được viết hiện tại, mã này để lại các số 0 đứng đầu trên bất kỳ số nguyên nào.


40 byte:x=>[...x].map(y=>a+=+x.slice(0,y),a=0)|a
Xù xì

3

R, 57 byte

đã lưu thêm một lần nữa nhờ @Vlo

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

là: Đã lưu 4 byte nhờ đề xuất của @Robert Hacken.

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

Một cách tiếp cận chuỗi đơn giản.


1
Bạn có thể lưu 4 byte thay thế unlistbằng el.
Robert Hacken

1
Lưu 1 với chuyển nhượng nội tuyếnsum(strtoi(substring(i<-scan(,""),1,el(strsplit(i,"")))))
Vlo


2

Than , 10 byte

IΣIEθ✂θ⁰Iι

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

   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

Haha, tôi đã có một điều chính xác
ASCII - chỉ

2

Octave , 56 byte

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

Hàm ẩn danh lấy một chuỗi làm đối số đầu vào và trả về một số làm đầu ra.

Hãy thử trực tuyến!

Phiên bản ngắn hơn

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

hoạt động trong Matlab, vì char(0)được coi là một không gian.


2

Thạch ,  7  5 byte

-2 nhờ Dennis (véc tơ đầu>. <)

4 nếu chúng ta có thể lấy danh sách các chữ số *

Dḣ`ḌS

Hãy thử trực tuyến!

* ḣ`ḌS

Làm sao?

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

Perl 6 , 27 byte

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

Kiểm tra nó

Mở rộng:

{  # 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 「$_」
}


2

dc , 55 byte

[0*]sq?dsfZ1-se[lfddZrIle^/I%-d0>qIr^/+led1-se0<a]dsaxp

Không có chuỗi cũng không có mảng! Thật vậy, các chữ số cần thiết chỉ có được thông qua thao tác toán học.

Hãy thử trực tuyến!


1

Husk , 6 byte

ṁd´M↑d

Hãy thử trực tuyến!

Giải trình

ṁ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

J , 18 byte

[:+/"."0".@{."0 1]

Giải trình

Lấy một chuỗi làm đầu vào

           {."0 1  - take
    "."0           - current char as int items
                 ] - from the argument
         ".        - and convert them to an integer  
[:+/               - add them up

Hãy thử trực tuyến!


1

Japt, 5 byte

Đưa đầu vào dưới dạng một chuỗi.

¬x@¯X

Thử nó


Giải trình

          :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 Hoặc là Japt thực sự chơi golf hoặc tôi đang thực sự sai
ASCII - chỉ

2
@ Chỉ ASCII: Japt là "golfy" hơn nhiều so với hầu hết mọi người nhận ra; chúng tôi giành chiến thắng trong các thử thách, thậm chí đánh bại Char than SOGL trong một thử thách nghệ thuật gần đây .
Xù xì

@Shaggy Chắc chắn, nhưng tôi đã không nhận ra đó là môn đánh gôn cấp Jelly / Thật / 05AB1E
ASCII chỉ có

@ Chỉ ASCII: Ồ, vâng, chắc chắn là ở đó với họ, giữ nó rất độc đáo :) Nếu bạn quan tâm, hãy xem ngôn ngữ của chúng tôi về đề cử tháng. hoặc thỉnh thoảng ghé vào phòng chat Japt và chúng tôi sẽ cho bạn một chuyến tham quan.
Shaggy

1

Stax , 6 byte

ç╫&º±å

Chạy và gỡ lỗi trực tuyến

Đại diện ascii tương ứng của cùng một chương trình là đây.

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

Trên thực tế , 10 byte

╝ß⌠≈╛H≈⌡MΣ

Hãy thử trực tuyến!

Giải trình

╝          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

JavaScript, 43 byte

Sau 3 giờ sáng, tại sao tôi vẫn chơi golf?!

Đưa đầu vào dưới dạng một chuỗi.

s=>(g=x=>s[x]?+s.slice(0,s[x])+g(++x):0)(0)

Dùng thử trực tuyến


0

Perl 5, 26 byte

Bao gồm +1chop

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

0

K4 , 22 byte

Dung dịch:

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

Ví dụ:

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

Giải trình:

Đột nhập vào cơ sở 10, lấy tối thiểu của mỗi số và độ dài của danh sách từ đây. Chuyển đổi trở lại và tổng hợp.

+/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

Java 8, 92 byte

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

Giải trình:

Hãy thử trực tuyến.

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

Thạch , 6 byte

DµḣµVS

Hãy thử trực tuyến!

Lấy Digits của đầu vào, sau đó lấy các phần tử [mỗi chữ số] đầu tiên của đầu vào ( ead), sau đó e Val mỗi tổng để làm cho nó một số một lần nữa và Sum.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.