ระบุตัวเลขให้พิมพ์“ ผลรวมรวม”


20

กำหนดตัวเลขเป็นอินพุตพิมพ์ผลรวมโดยรวม

จำนวนรวมคืออะไร?

พิจารณาจำนวน13214การป้อนข้อมูล

วนผ่านตัวเลขแต่ละตัวเริ่มจากด้านซ้ายเราจะสามารถได้รับผลรวมของมัน

1 หมายถึงดูที่ตัวเลขตัวแรกและเพิ่มลงในผลรวม, sum = 1

3 หมายถึงดูที่ "ตัวเลข 3 ตัวแรก" และเพิ่มลงในผลรวม, sum = 1 + 132

2 หมายถึงดูที่ "ตัวเลข 2 ตัวแรก" และเพิ่มลงในผลรวม, sum = 1 + 132 + 13

1 หมายถึงดูตัวเลขตัวแรกและเพิ่มลงในผลรวม sum = 1 + 132 + 13 + 1

4 หมายถึงดูที่ "ตัวเลข 4 ตัวแรก" และเพิ่มลงในผลรวม, sum = 1 + 132 + 13 + 1 + 1321

ยอดรวม = 1468และนี่คือผลลัพธ์ของคุณ


กรณีพิเศษ:

หากเราพบกับ a 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
บ่อยครั้งที่คำถามกับงานประเภทนี้: เราขอยอมรับรายการตัวเลขเป็นข้อมูลที่เราป้อนได้หรือไม่?
Jonathan Allan

7
2315กรณีทดสอบที่ขาดหายไป+ 2จากและจะส่งผลให้1 2571
Jonathan Allan

เราคาดหวังว่าจะต้องจัดการกับอินพุตที่เริ่มต้นด้วย 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
Magic Octopus Urn

ดีใจที่ฉันรอที่จะเพิ่มลิงค์ไปยังไบต์แล้ว: p
Jonathan Allan

ε£}สามารถ€£บันทึกไบต์
Kevin Cruijssen

@KevinCruijssen เป็นตัวเลือกเมื่อฉันสร้างสิ่งนี้ด้วยหรือไม่
Jonathan Allan

@JanathanAllan ไม่แน่ใจทั้งหมด แต่ฉันคิดว่ามันแน่นอนแล้ว Adnanเริ่มเขียน Elixir rewrite ในฤดูร้อนปี 2018 (ซึ่งเปิดตัวในเดือนสิงหาคม) และมีอยู่แล้วในขณะที่ในรุ่นมรดกของ 05AB1E ก่อนหน้านั้น มันมีอยู่แล้วเมื่อฉันโพสต์คำตอบแรกของฉัน 05AB1E ในเดือนเมษายน 2018 ดังนั้นอาจเป็นไปได้ว่ามันจะถูกเพิ่มหลังจากคุณโพสต์คำตอบนี้ แต่ไม่แน่ใจ
Kevin Cruijssen

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 ทำในลักษณะที่ดูเหมือนแฮ็กน้อยกว่า (?) สำหรับฉันเว้นแต่ว่าฉันโง่และทำให้บางสิ่งบางอย่างยุ่งเหยิง (ปกติ)
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)

เพื่อให้คุณรู้ว่า downvote ดูเหมือนจะได้รับโดยอัตโนมัติจากผู้ใช้ชุมชนเมื่อฉันแก้ไขส่วนหัวของโพสต์ของคุณ ขอโทษ มันเป็นที่น่ารำคาญคุณลักษณะที่ไร้สาระ แม้ว่าฉันจะไม่รู้ว่าทำไมถึงเป็นเช่นนั้นในเวลานี้เพราะเท่าที่ฉันสามารถบอกได้ว่านี่ไม่ใช่การตั้งค่าคุณภาพต่ำ
Steadybox

ยินดีต้อนรับสู่ PPCG! ส่งแรกที่ดี! และใช่อย่างที่ Steadybox กล่าวไว้ downvote ถูกวางโดยอัตโนมัติโดยไม่มีเหตุผลที่ดีโดยเฉพาะ โพสต์ของคุณได้รับการโหวตเพิ่มขึ้นเล็กน้อยดังนั้นหวังว่าในงาน cron ครั้งต่อไปควรลบ downvote อัตโนมัติ :)
HyperNeutrino

3

Haskell, 43 37 bytes

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

Ruby , 36 ไบต์

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

ลองออนไลน์!


#sumไม่ได้กำหนดไว้ใน fixnums ดังนั้นฉันคิดว่าคุณต้องการnเป็นสตริง อย่างไรก็ตามString#sumคำนวณnot a particularly good checksumและละเว้นบล็อกที่คุณให้ หากคุณมีความหมายn.chars.sum{, Enumerable#sumไม่ได้อยู่ใน STDLIB ทับทิมก็เป็นส่วนขยายให้โดยทางรถไฟ โปรดทดสอบวิธีแก้ปัญหาของคุณก่อนโพสต์
Shelvacu

@Shelvacu ใช่ฉันกำลังรับอินพุตเป็นอาร์เรย์ แต่ ... ดูส่วนท้ายที่ให้ไว้ Plus 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 bytes: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,"")))))

คือ: บันทึกแล้ว 4 ไบต์ขอบคุณคำแนะนำของ @Robert Hacken

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

วิธีการสตริงที่เรียบง่าย


1
คุณสามารถบันทึก 4 ไบต์แทนที่โดยunlist el
Robert Hacken

1
ประหยัด 1 ด้วยการมอบหมายแบบอินไลน์sum(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 ต้องขอบคุณเดนนิส (หัวเวกเตอร์>. <)

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

dc , 55 ไบต์

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

ไม่มีสตริงหรืออาร์เรย์! แน่นอนตัวเลขที่ต้องการจะได้รับเพียงผ่านการจัดการทางคณิตศาสตร์

ลองออนไลน์!


1

Husk , 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 ทั้งสอง Japtive เป็นกอล์ฟจริงๆหรือฉันทำผิดจริง
เท่านั้น

2
@ ASCII เท่านั้น: Japtapt เป็น "กอล์ฟ" มากกว่าที่คนส่วนใหญ่รู้ เราชนะส่วนแบ่งการยุติธรรมของเราของความท้าทายแม้ตีถ่านและ SOGL ในล่าสุดascii-ศิลปะที่ท้าทาย
ปุย

@Shaggy แน่นอน แต่ฉันไม่ได้ตระหนักว่ามันเป็น Jelly / จริง / 05AB1E ระดับ golfy
ASCII เท่านั้น

@ ASCII เท่านั้น: โอ้ใช่แล้วมันอยู่ที่นั่นกับพวกเขาถือเป็นของตัวเอง :) ถ้าคุณสนใจลองดูที่ภาษาของพวกเราในเดือนนั้น หรือแวะเข้าไปที่ห้องแชท 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

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

ลองออนไลน์!

รับDigits ของอินพุตจากนั้นรับองค์ประกอบ [แต่ละหลักแรกของอินพุต ( ead) จากนั้นVรวมอัลแต่ละผลรวมเพื่อทำให้ตัวเลขอีกครั้งและSเอ่อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.