Diberi nomor, cetak "jumlah kolektif"


20

Diberi nomor sebagai input, cetak jumlah kolektifnya

Apa itu jumlah kolektif?

Pertimbangkan nomor 13214, input

Melewati setiap digit mulai dari kiri, kita akan dapat memperoleh jumlah kolektifnya.

1 berarti melihat angka pertama, dan menambahkannya ke jumlah, jumlah = 1

3 berarti melihat "3 digit pertama" dan menambahkannya ke jumlah, jumlah = 1 + 132

2 berarti melihat "2 digit pertama" dan menambahkannya ke jumlah, jumlah = 1 + 132 + 13

1 berarti melihat angka pertama, dan menambahkannya ke jumlah, jumlah = 1 + 132 + 13 + 1

4 berarti melihat "4 digit pertama" dan menambahkannya ke jumlah, jumlah = 1 + 132 + 13 + 1 + 1321

Jumlah total = 1468dan ini adalah output Anda


Kasus khusus:

Jika kita menjumpai a 0, maka jelas kita menyimpan jumlah yang sama

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

Jika kita menemukan angka yang lebih besar dari panjang input, kita tambahkan semuanya

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

Kasus uji:

collectiveSum(0) = 0

collectiveSum(2) = 2

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

Jumlah byte terpendek menang. Selamat bermain golf!


6
Seperti yang sering ditanyakan dengan tugas-tugas semacam ini: Bisakah kita menerima daftar digit sebagai masukan kita?
Jonathan Allan

7
Kasing 2315uji tidak ada + 2dari 1dan harus menghasilkan 2571.
Jonathan Allan

Apakah kita berharap harus berurusan dengan input yang dimulai dengan 0 selain dari 0? Bagaimana seharusnya program menangani input ini
fəˈnɛtɪk

Sepertinya test case terakhir salah; seharusnya 2571.
Shaggy

Saya tidak melihat mengapa input harus berupa angka daripada daftar bilangan bulat. Sepertinya bentuk input rumit yang tidak perlu.
Wheat Wizard

Jawaban:


7

05AB1E ,  4  3 byte

-1 terima kasih kepada Kevin Cruijssen (penggunaan menghindari a })

€£O

Cobalah online!

Bagaimana?

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

Kalahkan saya dengan 13 detik xD
Magic Octopus Mm

Senang saya menunggu untuk menambahkan tautan ke byte kemudian: p
Jonathan Allan

ε£}bisa €£untuk menyimpan byte.
Kevin Cruijssen

@KevinCruijssen apakah itu juga pilihan ketika saya membuat ini?
Jonathan Allan

@ Jonathan Allan Tidak sepenuhnya yakin, tapi saya pikir memang sudah. Adnan mulai menulis penulisan ulang Elixir di Musim Panas 2018 (yang dirilis pada bulan Agustus), dan sudah ada di sana cukup lama dalam versi warisan 05AB1E sebelum itu. Itu sudah ada di sana ketika saya memposting jawaban 05AB1E pertama saya pada bulan April 2018. Jadi mungkin saja itu ditambahkan segera setelah Anda memposting jawaban ini, tetapi saya tidak yakin.
Kevin Cruijssen

5

Python 2 , 43 byte

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

Cobalah online!


Sayangnya ini muncul untuk menaikkan ValueErrorinput untuk 1301, atau input apa pun yang memiliki nol sebagai salah satu digitnya.
mathmandan

@mathmandan Harus diperbaiki sekarang?
ASCII

The intFungsi dapat menerima integer, menggantikan '0'literal string dengan hanya 0harus mencukur habis satu byte.
MooseOnTheRocks

@MooseOnTheRocks Apakah dengan cara yang tampak kurang hacky (?) Bagi saya, kecuali saya bodoh dan mengacaukan sesuatu (biasanya)
ASCII-only

4

Python 2, 72 byte

Pengiriman pertama! Terima kasih kepada @DestructibleLemon untuk bantuannya!

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

Asal tahu saja, downvote tampaknya telah diberikan secara otomatis oleh pengguna komunitas ketika saya mengedit header posting Anda. Maaf. Ini fitur yang menjengkelkan, tidak masuk akal . Meskipun saya tidak tahu mengapa hal itu terjadi kali ini, karena sejauh yang saya tahu, ini tidak ditandai sebagai kualitas rendah.
Steadybox

Selamat datang di PPCG! Pengiriman pertama yang bagus! Dan ya, seperti kata Steadybox, downvote secara otomatis ditempatkan tanpa alasan yang jelas. Posting Anda telah mendapatkan beberapa upvotes jadi semoga pada pekerjaan cron berikutnya downvote otomatis harus dihapus :)
HyperNeutrino

3

Haskell, 43 37 byte

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

Cobalah online!

Nomor input diambil sebagai string.

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

Cobalah online!


#sumtidak didefinisikan pada fixnums, jadi saya berasumsi Anda ingin nmenjadi string. Namun, String#sumhitung a not a particularly good checksumdan abaikan blok yang Anda berikan. Jika yang Anda maksudkan n.chars.sum{, Enumerable#sumbukan di stdlib ruby, itu adalah ekstensi yang disediakan oleh rel. Silakan uji solusi Anda sebelum mempostingnya.
Shelvacu

@Shelvacu Ya, saya mengambil input sebagai array ... lihat catatan kaki yang disediakan. Plus Enumerable#sumada di Ruby 2.4 , dan TIO menggunakan 2.4
ASCII-satunya

31 byte jika Anda mengambil array angka sebagai input
Asone Tuhid

@AsoneTuhid Saya tidak berpikir itu adalah bentuk input yang valid, jika Anda menemukan bukti sebaliknya tolong jelaskan
ASCII-satunya

Halaman ini sepertinya tidak membahas masalah ini tetapi saya tidak melihat daftar bilangan bulat sebagai terlalu berbeda dari daftar karakter (yang merupakan jawaban Anda sebagai masukan)
Asone Tuhid

3

JavaScript, 42 40 byte

Terima kasih @Shaggy untuk bermain 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"))

Menerima input sebagai string dan mengembalikan integer. Seperti yang saat ini ditulis, kode ini meninggalkan nol di bilangan bulat terkemuka.


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

3

R, 57 byte

menyimpan satu lagi berkat @Vlo

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

was: Disimpan 4 byte berkat saran @Robert Hacken.

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

Pendekatan string sederhana.


1
Anda dapat menyimpan 4 byte menggantikan unlistdengan el.
Robert Hacken

1
Simpan 1 dengan tugas sebarissum(strtoi(substring(i<-scan(,""),1,el(strsplit(i,"")))))
Vlo


2

Arang , 10 byte

IΣIEθ✂θ⁰Iι

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

   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, saya memiliki hal yang persis sama
hanya ASCII

2

Oktaf , 56 byte

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

Fungsi anonim yang mengambil string sebagai argumen input dan mengembalikan angka sebagai output.

Cobalah online!

Versi lebih pendek

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

bekerja di Matlab, karena char(0)diperlakukan sebagai ruang.


2

Jelly ,  7  5 byte

-2 Terima kasih kepada Dennis (head vectorises>. <)

4 jika kita dapat mengambil daftar angka *

Dḣ`ḌS

Cobalah online!

* ḣ`ḌS

Bagaimana?

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}

Menguji

Diperluas:

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

Harus dikompilasi dengan -lmsakelar atau GCC tidak mengenali fungsi matematika.

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

Cobalah online!


2

dc , 55 byte

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

Tidak ada string atau array! Memang, angka yang diperlukan diperoleh semata-mata melalui manipulasi matematika.

Cobalah online!


1

Sekam , 6 byte

ṁd´M↑d

Cobalah online!

Penjelasan

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

Penjelasan

Mengambil string sebagai input

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

Cobalah online!


1

Japt, 5 byte

Mengambil input sebagai string.

¬x@¯X

Cobalah


Penjelasan

          :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 Entah Japt benar-benar golf atau saya melakukan Sebenarnya salah
ASCII-satunya

2
@ Khusus ASCII: Japt jauh lebih "golf" daripada yang disadari kebanyakan orang; kami memenangkan tantangan yang adil, bahkan mengalahkan Charcoal dan SOGL dalam tantangan ASCI -art baru -baru ini .
Shaggy

@Shaggy Tentu, tapi saya tidak menyadari itu Jelly / Sebenarnya / 05AB1E level golfy
ASCII-only

@ Khusus ASCII: Oh, ya, pasti ada di sana bersama mereka, memegangnya sendiri dengan baik :) Jika Anda tertarik, lihat bahasa kami di nom bulan ini. atau mampir ke ruang obrolan Japt suatu saat dan kami akan memberi Anda tur.
Shaggy

1

Stax , 6 byte

ç╫&º±å

Jalankan dan debug secara online

Representasi ascii yang sesuai dari program yang sama adalah ini.

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

Sebenarnya 10 byte

╝ß⌠≈╛H≈⌡MΣ

Cobalah online!

Penjelasan

╝          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

Baik setelah jam 3 pagi, mengapa saya masih bermain golf ?!

Mengambil input sebagai string.

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

Cobalah online


0

Perl 5, 26 byte

Termasuk +1untukp

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

0

K4 , 22 byte

Larutan:

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

Contoh:

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

Penjelasan:

Masuk ke basis-10, ambil min dari setiap angka dan panjang daftar dari ini. Konversi kembali dan jumlahkan.

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

Penjelasan:

Cobalah online.

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 byte

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                                 

Coba di sini
Berikan nilai Input pada tab STDIN.



0

Jelly , 6 byte

DµḣµVS

Cobalah online!

Dapatkan Digits dari input, lalu dapatkan elemen [setiap digit] pertama dari input ( ead), lalu e Val masing-masing penjumlahan untuk menjadikannya angka lagi dan Sum.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.