番号が与えられたら、その「集合合計」を印刷します


20

入力として数値を指定し、その総和を出力します

集合合計とは何ですか?

13214、入力を考えます

左から始まる各桁をループして、その総和を取得することができます。

1 は、最初の数字を見て、合計に追加することを意味します。合計= 1

3 は、「最初の3桁」を見て、合計に追加することを意味します。sum= 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
これらの種類のタスクに関するよくある質問のように、数字のリストを入力として受け入れることはできますか?
ジョナサンアラン

7
2315テストケースが不足している+ 2からに1して生じるはずです2571
ジョナサンアラン

0以外の0で始まる入力を処理する必要がありますか?プログラムはこれらの入力をどのように処理すべきか
fəˈnɛtəˈk

最後のテストケースが間違っているようです。する必要があります2571
シャギー

入力が整数のリストではなく数値である理由がわかりません。不必要に面倒な形式の入力のようです。
小麦ウィザード

回答:


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で私を倒す
マジックタコ

バイトにリンクを追加するのを待っていて
ジョナサンアラン

ε£}することができ€£、バイトを保存します。
ケビンクルーイッセン

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

オンラインでお試しください!


残念ながら、これはValueErrorforの入力1301、またはその数字の1つがゼロである入力を発生させるようです。
-mathmandan

@mathmandan今すぐ修正する必要がありますか?
ASCIIのみ

int機能は交換、整数を受け入れることができる'0'だけで文字列リテラルを01バイト剃り落とす必要があります。
MooseOnTheRocks

@MooseOnTheRocks馬鹿げて何かをめちゃくちゃにしない限り(通常)、私にはあまりハックされていないように見えました(?)
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

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

オンラインでお試しください!


#sumfixnumsでは定義されていないためn、文字列にしたいのではないでしょうか。ただし、String#suma not a particularly good checksumを計算し、指定したブロックを無視します。あなたが意図した場合はn.chars.sum{Enumerable#sumルビーSTDLIBではないが、それはレールが提供する拡張機能です。ソリューションを投稿する前にテストしてください。
-Shelvacu

@Shelvacuええ、私は入力を配列として取得しています...フッターを参照してください。プラスEnumerable#sumのRuby 2.4であり、かつTIOは2.4を使用しています
ASCIIのみの

入力として数字の配列を使用する場合は31バイト
Asone Tuhid

あなたが証拠を見つけた場合、私はそう説明してください、それは入力の有効形だとは思わない@AsoneTuhid
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
シャギー

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
ロバートハッケン

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

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



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は本当にgolfyであるか、私は実際には間違ってやっている
ASCIIのみ

2
@ASCIIのみ:Japtは、ほとんどの人が認識しているよりもはるかに「ゴルフ」です。私たちは、最近のアスキーアートの挑戦でチャコール SOGLを打ち負かすという挑戦の公平なシェアを獲得しました。
シャギー

@Shaggy Sure、でもゼリー/実際/ 05AB1Eレベルのゴルフだとは知らなかった
ASCIIのみ

@ASCIIのみ:ああ、それは間違いなく彼らと一緒にあり、それをうまく保持しています:)興味があるなら、今月の私たちの言語を見てください。または、Japtチャットルームにドロップして、ツアーを提供します。
シャギー



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



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.