给定数字,打印出其“总和”


20

给定一个数字作为输入,打印出其总和

什么是集体款项?

考虑数字13214,输入

从左侧开始遍历每个数字,我们将能够获得其总和。

1 表示查看第一个数字,并将其添加到总和中,sum = 1

3 表示查看“前3位数字”并将其添加到总和中,总和= 1 + 132

2 表示查看“前2位数字”并将其添加到总和中,总和= 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
这些任务通常是一个问题:我们可以接受数字列表作为输入吗?
乔纳森·艾伦

7
2315测试案例缺少+ 21和应导致2571
乔纳森·艾伦,

除了0之外,我们是否还需要处理以0开头的输入?程序应如何处理这些输入
fəˈnɛtɪk

看起来最后一个测试用例是错误的;应该是2571
毛茸茸的

我不明白为什么输入应该是数字而不是整数列表。似乎是不必要的输入形式。
小麦巫师

Answers:


7

05AB1E 4  3 字节

-1感谢Kevin Cruijssen(避免使用}

€£O

在线尝试!

怎么样?

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

击败我13秒xD
魔术章鱼缸

很高兴我等待着将链接添加到字节,然后:p
Jonathan Allan '18

ε£}可以€£保存一个字节。
凯文·克鲁伊森

创建这个时,@ KevinCruijssen也是一种选择吗?
乔纳森·艾伦

@JonathanAllan不确定,但我确实已经确定了。阿德南(Adnan)在2018年夏季(8月发布)开始编写Elixir重写,并且在此之前的05AB1E旧版本中已经存在了一段时间。当我在2018年4月发布我的第一个05AB1E答案时就已经在那里。因此,有可能在您发布此答案后不久就添加了它,但我不确定。
凯文·克鲁伊森

5

Python 2,43个字节

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

在线尝试!


不幸的是,这似乎会引发的ValueError输入1301,或任何以零为数字之一的输入。
mathmandan

@mathmandan应该现在修复吗?
分仅使用ASCII码

int函数可以接受整数,用应替换一个字节的'0'字符串文字代替0
MooseOnTheRocks

@MooseOnTheRocks在我看来似乎不太hacky(?),除非我很愚蠢并且弄乱了某些东西(通常)
ASCII纯ASCII

4

Python 2,72个字节

第一次提交!感谢@DestructibleLemon的帮助!

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

大家知道,当我编辑您的帖子标题时,社区用户似乎已经自动发出了反对票。抱歉。这是一个烦人,荒谬的功能。尽管我不知道这次为什么这么做,因为据我所知,这并没有被标记为低质量。
Steadybox '18

欢迎来到PPCG!不错的第一次提交!是的,正如Steadybox所说的,下降票是自动放置的,没有特别的原因。您的帖子已经获得了一些支持,因此希望在下一个cron作业中应删除自动支持:)
HyperNeutrino

3

Haskell,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}}

在线尝试!


#sum在fixnums上没有定义,所以我假设您想n成为一个字符串。但是,String#sum计算a not a particularly good checksum并忽略您为其提供的块。如果您的意思是n.chars.sum{Enumerable#sum不在ruby stdlib中,则为rails提供的扩展。在发布解决方案之前,请先对其进行测试。
Shelvacu

@Shelvacu是的,尽管如此,我还是将输入作为数组...参见提供的页脚。Plus Enumerable#sum在Ruby 2.4中使用TIO使用2.4
ASCII纯字符(

如果您将数字数组作为输入
则为

@AsoneTuhid我认为这不是有效的输入形式,如果您发现其他证据,请解释
ASCII码,仅ASCII

此页面似乎无法解决问题,但我认为整数列表与字符列表没有太大区别(这就是您的答案所输入的内容)
Asone Tuhid

3

JavaScript,42 40字节

感谢@Shaggy打高尔夫球2个字节

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

接收输入作为字符串并返回整数。如当前所写,此代码在任何整数上保留前导零。


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

was:由于@Robert Hacken的建议,节省了4个字节。

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

一种简单的字符串方法。


1
您可以保存4个字节替换unlistel
罗伯特·哈肯

1
通过内联分配保存1sum(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码仅

2

八度,56字节

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

匿名函数,将字符串作为输入参数,并返回数字作为输出。

在线尝试!

较短的版本

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

在Matlab中工作,因为char(0)它被视为空间。


2

果冻 7  5 字节

-2感谢Dennis(头部向量>。<)

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

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

2

C(gcc)77 75字节

必须使用-lm开关进行编译,否则GCC无法识别数学函数。

r,q,i;f(n){for(r=0,i=n;i;i/=10)q=log10(n)+1-i%10,r+=n/pow(10,q>0?q:0);n=r;}

在线尝试!


2

dc,55个字节

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

没有字符串或数组!实际上,仅通过数学操作即可获取所需的数字。

在线尝试!


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

Japt,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级高尔夫球场
ASCII码,仅ASCII

仅限@ASCII:哦,是的,它们肯定在那里,很好地保持了它的:)如果您有兴趣,请查看我们本月nom的语言。或在某个时候进入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

JavaScript,43个字节

凌晨3点好了,为什么我仍然打高尔夫球?

将输入作为字符串。

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

在线尝试



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

Java 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

果冻,6个字节

DµḣµVS

在线尝试!

获取D输入的位数,然后获取输入的前[每个数字]个元素(ead),然后V分别对每个和再次求和,使其成为一个数字和Sum。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.