Bir sayı verildiğinde, onun “kolektif toplamını” yazdırın


20

Girdi olarak bir sayı verildiğinde, toplu toplamını yazdırın

Toplu toplam nedir?

Numarayı 13214, girişi düşünün

Soldan başlayarak her bir basamağa doğru dönerek kolektif toplamını elde edebileceğiz.

1 ilk basamağa bakmak ve toplamı eklemek anlamına gelir, sum = 1

3 "ilk 3 basamağa" bakmak ve toplamı eklemek demektir, toplam = 1 + 132

2 "ilk 2 basamağa" bakmak ve toplamı eklemek demektir, toplam = 1 + 132 + 13

1 ilk basamağa bakmak ve toplamı eklemek anlamına gelir, toplam = 1 + 132 + 13 + 1

4 "ilk 4 basamağa" bakmak ve toplamı eklemek demektir, toplam = 1 + 132 + 13 + 1 + 1321

Toplam toplam = 1468ve bu sizin çıktınız


Özel durumlar:

Bir ile karşılaşırsak 0, toplamı aynı tutarız

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

Girişin uzunluğundan daha büyük bir sayı ile karşılaşırsak, hepsini ekleriz

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

Test senaryoları:

collectiveSum(0) = 0

collectiveSum(2) = 2

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

En kısa bayt miktarı kazanır. Mutlu golf!


6
Genellikle bu tür görevlerle ilgili bir soru olduğu gibi: Rakamların bir listesini girdi olarak kabul edebilir miyiz?
Jonathan Allan

7
2315Test durumu eksik + 2gelen 1ve yol açmalıdır 2571.
Jonathan Allan

0'dan başlayarak 0 ile başlayan girdilerle uğraşmayı düşünüyor muyuz? Program bu girdilerle nasıl başa
çıkmalı

Son test durumu yanlış gibi görünüyor; olmalı 2571.
Shaggy

Girişin neden bir tamsayı listesi yerine bir sayı olması gerektiğini anlamıyorum. Gereksiz yere hantal bir girdi biçimi gibi görünüyor.
Buğday Sihirbazı

Yanıtlar:


7

05AB1E ,  4  3 bayt

-1 Kevin Cruijssen sayesinde ( kaçınmanın kullanımı })

€£O

Çevrimiçi deneyin!

Nasıl?

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

Beni 13 saniye xD yendi
Sihirli Ahtapot Urn

Sevindim sonra bayt bağlantı eklemek için bekledi: p
Jonathan Allan

ε£}€£bir bayt kaydetmek olabilir .
Kevin Cruijssen

@KevinCruijssen bunu yarattığımda da bir seçenek miydi?
Jonathan Allan

@JonathanAllan Tamamen emin değilim, ama bence zaten zaten öyleydi. Adnan , İksir yeniden yazımını 2018 Yazında (Ağustos ayında yayınlandı) yazmaya başladı ve zaten bir süredir 05AB1E'nin eski versiyonunda vardı. Nisan 2018'de ilk 05AB1E cevabımı gönderdiğimde zaten vardı. Bu cevabı gönderdikten kısa bir süre sonra eklenmiş olabilir, ancak emin değilim.
Kevin Cruijssen

5

Python 2 , 43 bayt

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

Çevrimiçi deneyin!


Ne yazık ki bu ValueError, girdisinin 1301bir girdisini veya basamaklarından biri olarak sıfır olan herhangi bir girdiyi yükseltiyor gibi görünüyor .
mathmandan

@mathmandan Şimdi düzeltilmeli mi?
Yalnızca ASCII

intFonksiyon yerine bir tamsayı kabul edebilir '0'sadece ile dize 0bir byte tıraş olmalıdır.
MooseOnTheRocks

(?) @MooseOnTheRocks I (genellikle) aptal ve haberci bir şey olmadığım sürece, az hacky görünümlü bana öyle geliyor ki bir bakıma mü
ASCII sadece

4

Python 2,72 bayt

İlk başvuru! Yardım için @ DestructibleLemon'a teşekkürler!

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

Bildiğiniz gibi , yayınınızın başlığını düzenlediğimde downvote topluluk kullanıcısı tarafından otomatik olarak verilmiş gibi görünüyor . Üzgünüm. Bu sinir bozucu, saçma bir özellik . Bu sefer, bildiğim kadarıyla söyleyebilirim, çünkü bu olduğunu neden yaptığını bilmiyorum rağmen değil düşük kaliteli olarak işaretlendi.
Steadybox

PPCG'ye Hoşgeldiniz! Güzel ilk teslim! Ve evet, Steadybox'ın dediği gibi, aşağı oylama otomatik olarak iyi bir sebep olmadan yerleştirildi. Mesajınız birkaç upvotes aldı umarım bir sonraki cron işinde otomatik downvote kaldırılmalıdır :)
HyperNeutrino

3

Haskell, 43 37 bayt

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

Çevrimiçi deneyin!

Giriş numarası bir dize olarak alınır.

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

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

Çevrimiçi deneyin!


#sumfixnums tanımlı değil, bu yüzden ndize olmak istediğinizi varsayalım . Ancak, a String#sumdeğerini hesaplar not a particularly good checksumve verdiğiniz bloğu yoksayar. Eğer demekse n.chars.sum{, Enumerable#sumo raylar tarafından sağlanan bir uzantısıdır, yakut stdlib değil. Lütfen göndermeden önce çözümlerinizi test edin.
Shelvacu

@Shelvacu Evet, girdi olarak dizi olarak alıyorum ... sağlanan altbilgiye bakın. Artı Enumerable#sumRuby 2.4'te ve TIO 2.4
sadece ASCII

Giriş olarak bir dizi basamak alırsanız 31 bayt
Asone Tuhid

@AsoneTuhid Bunun geçerli bir girdi biçimi olduğunu düşünmüyorum, aksi takdirde kanıt bulursanız lütfen açıklayın
sadece ASCII-sadece

Bu sayfa sorunu ele almak gibi görünmüyor ama tamsayıların bir karakter listesinden çok farklı olduğunu görmüyorum (cevabınızın girdi olarak aldığı şey budur)
Asone Tuhid

3

JavaScript, 42 40 bayt

2 bayt golf için teşekkürler @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"))

Girdiyi dize olarak alır ve bir tamsayı döndürür. Şu anda yazıldığı gibi, bu kod herhangi bir tamsayı üzerinde sıfırlar bırakır.


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

3

R, 57 bayt

@Vlo sayesinde bir tane daha kurtardı

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

oldu: @Robert Hacken'ın önerisi sayesinde 4 bayt kaydedildi.

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

Basit bir dize yaklaşımı.


1
Sen 4 byte değiştirerek kaydedebilirsiniz unlisttarafından el.
Robert Hacken

1
Satır içi atama ile 1 kazanınsum(strtoi(substring(i<-scan(,""),1,el(strsplit(i,"")))))
Vlo


2

Kömür , 10 bayt

IΣIEθ✂θ⁰Iι

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

   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, tam olarak aynı şeyi yaşadım
sadece ASCII-

2

Oktav , 56 bayt

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

Dizeyi giriş argümanı olarak alan ve bir sayıyı çıktı olarak döndüren anonim işlev.

Çevrimiçi deneyin!

Kısa versiyon

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

Matlab'da çalışır, çünkü char(0)boşluk olarak kabul edilir.


2

Jöle ,  7  5 bayt

Dennis sayesinde -2 (kafa vektörleri>. <)

4 basamak listelerini alabilirsek *

Dḣ`ḌS

Çevrimiçi deneyin!

* ḣ`ḌS

Nasıl?

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 bayt

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

Dene

Expanded:

{  # 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 bayt

İle derlenmelidir -lmAnahtarla veya GCC matematik fonksiyonlarını tanımıyor.

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

Çevrimiçi deneyin!


2

dc , 55 bayt

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

Dizgiler veya diziler yok! Gerçekten de, gerekli basamaklar yalnızca matematiksel manipülasyon yoluyla elde edilir.

Çevrimiçi deneyin!


1

Kabuk , 6 bayt

ṁd´M↑d

Çevrimiçi deneyin!

açıklama

ṁ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 bayt

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

açıklama

Bir dizeyi girdi olarak alır

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

Çevrimiçi deneyin!


1

Japt, 5 bayt

Girişi dize olarak alır.

¬x@¯X

Dene


açıklama

          :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 Ya Japt gerçekten golfçü ya da aslında yanlış yapıyorum
sadece ASCII-

2
@ Sadece ASCII: Japt çoğu insanın düşündüğünden çok daha “golfçu”; son zamanlarda yaşanan bir ascii-art meydan okumasında Charcoal ve SOGL'yi bile yenerek zorluklardan adil payımızı kazanıyoruz .
Shaggy

@Shaggy Tabii, ama Jelly / Aslında / 05AB1E seviyesi golfy olduğunu fark etmedim
sadece ASCII sadece

@ Sadece ASCII: Oh, evet, kesinlikle orada onlarla birlikte, güzel bir şekilde tutarak :) Eğer ilgileniyorsanız, nom ay ayının diline bir göz atın. ya da bir gün Japt sohbet odasına giderseniz size bir tur vereceğiz.
Shaggy

1

Stax , 6 bayt

ç╫&º±å

Çevrimiçi çalıştırın ve hata ayıklayın

Aynı programın karşılık gelen ascii temsili budur.

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

Aslında , 10 bayt

╝ß⌠≈╛H≈⌡MΣ

Çevrimiçi deneyin!

açıklama

╝          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

Perl 5, 26 bayt

içerir +1içinp

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

0

K4 , 22 bayt

Çözüm:

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

Örnekler:

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

Açıklama:

Taban-10'a bölün, her sayının min'ini ve listenin uzunluğunu alın. Geri dön ve özetle.

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

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

Açıklama:

Çevrimiçi deneyin.

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 bayt

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                                 

Burada deneyin
STDIN sekmesinde Giriş değeri sağlayın.



0

Jöle , 6 bayt

DµḣµVS

Çevrimiçi deneyin!

DGirişin igits'lerini alın , sonra girişin ( ead) ilk [her rakam] elemanını alın, sonra Vtekrar bir sayı ve Sum yapmak için her toplamı alın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.