เครื่องคิดเลขที่เพิ่มค่าถ่าน


18

งาน

สร้างเครื่องคิดเลขที่ใช้สตริงจากไฟล์ stdin หรืออะไรก็ตามและเพิ่มค่าทั้งหมดของตัวอักษร

ตัวอย่าง

Input
Hello World!

Output
1085

กฎระเบียบ

เครื่องคิดเลขต้องยอมรับการเข้ารหัส ASCII เพียงอย่างเดียว

รหัสที่สั้นที่สุดชนะ

หมายเหตุ

เกี่ยวกับความคิดเห็นของ m.buettner ฉันต้องพูดว่าฉันไม่ได้คิดถึงส่วนของมัลติไบต์
ดังนั้นฉันจึงทิ้งมันไว้เป็นสิ่งโบนัสเช่นกัน
เครื่องคิดเลขควรทำงานตามที่เขียนไว้ดังนั้นไม่จำเป็นต้องแก้ไขก่อนที่จะรวบรวมหรือตีความ

โบนัส

ขอบคุณSyntheticaนี่คือโบนัสอีกหนึ่งอย่าง

โปรแกรมที่มีเอาต์พุตต่ำสุดเมื่อคุณใช้รหัสในขณะที่อินพุทชนะจะได้รับดาว

ฉันไม่ต้องการแก้ไขโดยสมบูรณ์

หากคุณเขียนเพิ่มเติมเพื่อส่งออกค่า (ขวา) ใน UTF-8 คุณจะได้ดาว

รหัสที่ทำงานได้เร็วที่สุดบนแล็ปท็อปของฉัน (Lenovo Yoga 13 Intel Core i5 3317U 1.7Ghz, 8GB RAM, 128GB SSD, Intel HD 4000, Windows 8) ได้รับดาว

รหัสเว็บจะทำงานครั้งแรกภายใต้ IE11 ด้วยจักระแล้วใน FireFox 29.0.1 พร้อมSpiderMonkey

รหัส Linux จะทำงานบน Raspberry Pi พร้อม Raspbian

teststring คือ:

q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/E`ks(D'$z$\6Ac+MT&[s[]_Y(`<g%"w%cW'`c&q)D$0#C$QGf>?A$iawvc,}`9!('`c&q)D$0#C$QGf>?A$iawvc,}`9!(

ขอให้สนุกกับการเขียนโค้ด :)

Bonusscoring

ฉันวางแผนที่จะทำคะแนนในวันเสาร์นี้ดังนั้น 07.06.14 คำตอบทั้งหมดหลังจากวันนั้นจะไม่ได้รับคะแนนโบนัส)

คุณสามารถดาวน์โหลดรหัสที่ฉันจะใช้สำหรับการทดสอบได้ที่นี่เพื่อแยกและปรับปรุง :)

อัปเดตเล็กน้อยเพราะโบนัสแล็ปท็อปของฉันเสียไปบางส่วนดังนั้นฉันจะทำมันในสุดสัปดาห์หน้าฉันขอโทษจริง ๆ :(


3
ฉันได้รับ 1,085 สำหรับการHello World!ใช้สองภาษาที่แตกต่างกันสำหรับค่า ASCII บนคอมพิวเตอร์ของฉัน
Kyle Kanos

1
เขาอาจลืมเพิ่ม '!' แก้ไขคุณเร็วกว่า 3 วินาที ...
gxtaillon

1
ใครช่วยอธิบายหน่อยได้ไหม?
Knerd

3
ฉันเดาว่าคะแนนโหวตระบุว่าไม่ใช่ปัญหาที่ดีจริงๆ
Kyle Kanos

5
@Knerd ส่วนใหญ่เพราะมันเป็นเรื่องเล็กน้อยเกินไปในภาษาส่วนใหญ่ (อย่างที่คุณเห็นจากความยาวของการส่งที่คุณได้รับ)
Martin Ender

คำตอบ:


10

GolfScript 4 ตัวอักษร

{+}*

เพียงใช้ตัวดำเนินการ fold ( *) เพื่อเพิ่มอักขระทั้งหมด

ถ้ามันต้องทำงานกับสตริงว่าง, 9 ตัวอักษร:

{{+}*}0if

ขอบคุณ @PeterTaylor ที่ให้บริการรุ่น 6-char ทางเลือกที่ทำงานกับสตริงว่างได้:

0\{+}/

ไม่ทำงานกับสตริงว่าง
Howard

@ วิธีดีจุด; แก้ไข
Doorknob

0\{+}/รองรับสตริงว่าง
Peter Taylor

1
@ Doorknob ขออภัยสำหรับคำถามโง่ฉันจะป้อนข้อมูลได้อย่างไร ฉันใช้golfscript.apphb.com
Knerd

2
@immibid ไซคลอปส์ที่มีรูปทรงแปลกตา :-P (หรือใน GolfScript หน้า "swap-and-add-each"!)
Doorknob

7

APL (8)

+/⎕UCS⍞

คำอธิบาย:

  • +/ ผลรวมของ
  • ⎕UCS ค่า Unicode ของ
  • การป้อนอักขระ

ผลลัพธ์จะเป็นHello World!อย่างไร?
Knerd

1085@Knerd: มันจะไม่ถูกต้องถ้ามันให้ผลลัพธ์อื่น มันจะสรุปค่าของจุดรหัส Unicode ของอักขระ
marinus

ตกลงฉันไม่ได้สิ่งที่หมายถึง)
Knerd

1
@knerd: หมายถึงอ่านบรรทัดจากแป้นพิมพ์
marinus

คุณรู้จักล่าม APL ที่ให้บริการฟรีหรือไม่?
Knerd

6

Haskell 36

main=interact$show.sum.map fromEnum

อ่านข้อความจากที่ใด
Knerd

stdin $ printf "Hello World!" | ./charsum
gxtaillon

ตกลงฉันไม่สามารถรับมันทำงานบนเครื่อง Windows ของฉันฉันจะลองบน RPI เมื่อผมที่บ้าน
Knerd

เมื่อฉันรันโค้ดของคุณฉันเพิ่งได้รับสตริง "Hello World!" เป็นเอาท์พุท นี่คือ commandline ของฉัน:ECHO "Hello World! | ghci charsum.hs
Knerd

1
ใช้งานinteractและshowแทนgetContents>>=print:main=interact$show.sum.map fromEnum
Flonk

6

เครื่องมือ Shell + GNU ขนาด 29 ไบต์

echo `od -An -tuC`|tr \  +|bc

รับอินพุตจาก stdin:

$ printf "%s" 'Hello World!' | ./addchars.sh 
1085
$ 

คะแนนของตัวเอง: 2385


c, 52 ไบต์

c;main(p){while(~(p=getchar()))c+=p;printf("%d",c);}

คอมไพล์ด้วย (คำเตือนบางอย่างที่ผลิต):

gcc addchars.c -o addchars

รับอินพุตจาก stdin:

$ printf "%s" 'Hello World!' | ./addchars 
1085 $ 

คะแนนของตัวเอง: 4354


นี่คือคำตอบที่ดี CodeBlocks กับคอมไพเลอร์ GNU มักจะบ่นว่าตัวแปรไม่มีประเภทเช่น int c, main (int p) ดังนั้นฉันคิดว่าสิ่งเหล่านี้ควรรวมอยู่ในคำตอบของคุณ
bacchusbeale

@bacchusbeale ฉันได้เพิ่มหมายเหตุเกี่ยวกับคำเตือนการรวบรวม แต่ฉันคิดว่านี่เป็นเรื่องปกติเมื่อเล่นกอล์ฟในค ตราบใดที่โค้ดรวบรวมและทำงานตามที่คาดไว้คุณสามารถละเว้นคำเตือนได้ ดูcodegolf.stackexchange.com/a/2230/11259และcodegolf.stackexchange.com/a/2204/11259 แน่นอนว่ารหัสการผลิตนั้นแตกต่างกันอย่างสิ้นเชิง
บาดเจ็บทางดิจิตอล

@DigitalTrauma ช่องว่างเหล่านั้นจำเป็นจริง ๆ ? เชลล์ไม่สามารถเพิกเฉยกับช่องว่างและใช้ - เพื่อทำเครื่องหมายพารามิเตอร์ใหม่ได้หรือไม่?
Ashwin Gupta

@AshwinGupta คุณกำลังพูดถึงodคำสั่งหรือไม่ ไม่ได้ทำเช่นเดียวกับod -AntuC od -An -tuC
บาดเจ็บทางดิจิตอล

@ DigitalTrauma ใช่ฉันเป็น ฉันหมายถึงคุณไม่สามารถทำod-An-tuCหรือod -An-tuC
Ashwin Gupta

6

Javascript ( ES6 ) 51

alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)

@nderscore คุณช่วยอธิบายสิ่งที่ทำ...ก่อนหน้าpromptนี้ได้ไหม? นี่คือ ES6 สิ่งใหม่หรือเป็น pre-ES6
WallyWest

1
@WallyWest เรียกว่าตัวดำเนินการสเปรดและเป็นส่วนหนึ่งของร่าง ES6
ขีดล่าง

@nderscore ดังนั้นถ้าฉันเข้าใจไวยากรณ์ตัวดำเนินการสเปรดการใช้งานของคุณ[...prompt(x=0)]ได้รับพรอมต์ด้วยค่าเริ่มต้นที่ 0 (ซึ่งจะใช้ในภายหลังในผลรวม) และใช้อินพุตนั้นเป็นอาร์เรย์ของอักขระ ... ? เทคนิคใดจะเหมือนกันprompt(x=0).split("")ใช่ไหม?
WallyWest

1
@WallyWest prompt(x=0)หมายถึง "ตั้งค่า x เป็น 0 โทรpromptด้วยค่าของการตั้งค่า x เป็น 0" ซึ่งจะกล่าวว่า 0 มันจะเทียบเท่ากับการเขียน(x=0,prompt(x))
Cyoce


5

Python 3 - 28 ไบต์

print(sum(map(ord,input())))

ตัวอย่างการเรียกใช้:

$ ./sum_string.py <<< 'Hello World!'
1085

รับอินพุตจาก stdin ซึ่งmapเป็นordฟังก์ชันเพื่อรับค่า ASCII ของแต่ละอักขระsums it และprints


Ninja'd ฉันมีความคิดเดียวกันแน่นอน +1 สำหรับสิ่งนั้น
seequ

@TheRare ดังนั้นฉันแม้ว่าฉันจะนานขึ้นเพราะฉันใช้ Python 2.7 ฉันกำลังเป็นสนิม;)
Junıʇǝɥʇuʎs

@Synthetica ฉันมักจะใช้ Python 2.7 ซึ่งคำตอบจะเป็นอย่างไรprint sum(map(ord,raw_input()))
seequ

1
@TheRare ซึ่งเป็นคำตอบที่แน่นอนของฉัน;)
Junıʇǝɥʇuʎs

nitpicking นี่ แต่คุณสามารถทำให้มันทำงานได้ดีขึ้นโดยการเปลี่ยนไปmap(ord,input()) input().encode()ยังคงสามารถรวมออบเจ็กต์ไบต์และยังคงความยาวเท่าเดิม
cjfaure

5

ชุดประกอบ 8086 (16 บิต) - 47 41 ไบต์

เนื้อหาของtest.comไฟล์คือ:

98 01 c3 b4 01 cd 21 3c 0d 75 f5 89 c7 c6 05 24
89 d8 b1 0a 4f 31 d2 f7 f1 80 ca 30 88 15 09 c0
75 f2 89 fa b4 09 cd 21 c3

งานจริงเสร็จใน 11 ไบต์แรก; ฉันต้องการที่เหลือเพื่อพิมพ์ผลลัพธ์เป็นสัญกรณ์ทศนิยม

ซอร์สโค้ด (ให้เป็นอินพุตของแอสdebug.comเซมเบลอร์DOS ):

a
; input the string; count the sum
    cbw
    add bx, ax
    mov ah, 1
    int 21
    cmp al, d
    jne 100
; Prepare for output: stuff an end-of-line marker
    mov di, ax
    mov [di], byte 24
    mov ax, bx
    mov cl, a
; 114
; Divide by 10; write digits to buffer
    dec di
    xor dx, dx
    div cx
    or  dl, 30
    mov [di], dl
    or  ax, ax
    jne 114
; Print the string
    mov dx, di
    mov ah, 9
    int 21
    ret

rcx 29
n test.com
w
q

หมายเหตุบางประการเกี่ยวกับรหัส:

  • จัดการหนึ่งบรรทัดเท่านั้น (จนถึงอักขระสุดท้ายของบรรทัดที่ 13); แฮงค์หากไม่มีจุดสิ้นสุดของบรรทัด
  • รองรับอักขระ 7 บิตเท่านั้น (ผลลัพธ์ไม่ถูกต้อง)
  • เอาต์พุต 0 สำหรับอินพุตว่าง
  • ไม่สามารถจัดการเอาต์พุตที่มากกว่า 64K
  • การเรียนการสอนที่อยู่ 0x10d เขียนทับตัวเอง (บังเอิญบริสุทธิ์)
  • ต้องใช้โปรแกรมจำลองการทำงาน DOS เช่นDosBoxเพื่อประกอบและเรียกใช้โปรแกรมนี้

คุณเข้าใจได้อย่างไร oO
Knerd

5

CJam, 3 ไบต์ (รวม 260)

q1b

คุณสามารถลองออนไลน์ได้
ขอบคุณ jimmy23013 ที่ช่วยตัด 2 ตัวอักษร :)

คำอธิบาย:

q     read the input into a string  
1b    convert from base 1, treating each character as its numeric value

1
q1bสั้นกว่า
jimmy23013

4

Befunge98, 6 ไบต์, ผลรวม: 445

2j@.~+

ล่ามใด ๆ ก็น่าจะดี ผมใช้CCBI

ใช้ดังต่อไปนี้:

printf 'Hello World!' | ccbi calc.fg

ใช้งานได้กับอักขระหลายไบต์และสตริงว่าง

คำอธิบาย

  • 2j- ข้ามคำแนะนำสองคำสั่งถัดไป ( @และ.- ดูด้านล่าง)
  • ~ - ใส่ถ่านตัวต่อไปในกอง
  • +- เพิ่มค่ารหัสของถ่านใหม่เพื่อผลรวมปัจจุบัน ตัวชี้คำสั่งตัดไปที่จุดเริ่มต้นและวัฏจักรซ้ำ
  • เมื่อ~พบ EOF มันจะเข้าทิศทางของตัวชี้และคำสั่ง "ซ่อน" ทั้งสองจะถูกดำเนินการ:
  • . - พิมพ์ผลรวม
  • @ - ออก

4

Ruby, 13 12 ไบต์

p~9+gets.sum

sumเป็นฟังก์ชั่นในตัวที่รวมอักขระของสตริง ลบ 10 เพื่อบัญชีขึ้นบรรทัดใหม่ในตอนท้ายของgetsค่าส่งคืน

(แก้ไข 4 ปีต่อมาเพื่อเปลี่ยนx-10เป็น~9+x... ค่าของ~9คือ-10, แต่ให้เราลบช่องว่างระหว่างpและอาร์กิวเมนต์, บันทึกไบต์)


ฉันไม่คุ้นเคยกับ Ruby เลยคุณช่วยอธิบายรหัสของคุณหน่อยได้ไหม?
Knerd

1
รับเป็นฟังก์ชั่นที่อ่านสตริงจากมาตรฐานในจนกว่าจะมีการอ่านการขึ้นบรรทัดใหม่ก็จะส่งกลับสตริง String # sum เพิ่มค่าของอักขระแต่ละตัวซึ่งส่งคืน Fixnum Fixnum # - เป็นเพียงการลบ pเป็นวิธีการส่งออกค่าการแก้ปัญหาของบางสิ่งบางอย่างในบรรทัด
Kyle Smith

2

PowerShell - 27

[char[]]$args[0]|measure -s

ตัวอย่าง

> SumChars.ps1 'Hello World!'

Count    : 12
Average  : 
Sum      : 1085
Maximum  : 
Minimum  : 
Property : 

26 ถ้าคุณใช้[char[]]"$args"|measure -sตราบเท่าที่มีรายการ $ arg เพียงรายการเดียว
TessellatingHeckler

2

จูเลีย - 11 7 ตัวอักษรผลรวม = 943 536

เนื่องจากคำถามอนุญาตให้อินพุตมาจากแหล่งใดก็ตามที่คุณต้องการฉันเลือกตัวแปรที่มีอยู่ สมมติว่าAมีสตริงที่เราต้องการประเมิน

sum(A)1

เมื่อปรากฎว่าคุณสามารถรวมสตริงโดยตรงและจะประเมิน ... อย่างไรก็ตามเนื่องจากวิธีการจัดการกับการรวมของตัวอักษรหากมีจำนวนอักขระแปลก ๆ ในสตริงมันจะเอาท์พุทอักขระ แทนที่จะเป็นจำนวนเต็มของการเรียงลำดับใด ๆ ด้วยเหตุนี้เราจึงบังคับให้ส่งไปยัง int โดยการคูณด้วย 1

เวอร์ชั่นเก่า:

sum(A.data)

จะแสดงผลเป็นเลขฐานสิบหก (หากผลรวมน้อยกว่า 256 จะเป็น0x??ไม่เช่นนั้นจะเท่ากับ 8 ไบต์0x????????) หากใช้ในรหัสที่ใช้ผลลัพธ์ผลลัพธ์จะทำงานเหมือนกับหมายเลขอื่น ๆ (เป็นวิธีที่ Julia แสดง int ที่ไม่ได้ลงชื่อ)

การเห็นคุณค่าของผลในทศนิยมที่แนบข้างต้นในขณะที่อยู่ในint()int(sum(A.data))

สำหรับใครก็ตามที่ไม่รู้จักจูเลียคุณก็มอบหมายให้Aทำเช่นเดียวกันกับที่คุณทำกับตัวแปรอื่น ๆ ดังนั้นหรือA="Hello World!" A="sum(n.data)"ในกรณีที่คุณจำเป็นต้องใส่"หรือ'ตัวละครมีหลายตัวเลือกที่ง่ายที่สุด (เพราะหลีกเลี่ยงความต้องการความรู้เกี่ยวกับความแตกต่างของตัวอักษรสตริงจูเลีย) A=readline()ตามด้วยเพียงพิมพ์สตริงลงใน STDIN (ชนะ ' แม้ว่าจะไม่ได้รับการขึ้นบรรทัดใหม่) ลำดับการยกเว้นสำหรับการขึ้นบรรทัดใหม่นั้นเป็นปกติ\nแต่ฉันไม่เชื่อว่าคุณสามารถใช้กับ readline () ได้


+1 สำหรับวิธีแก้ปัญหาที่ฉลาดเจ้าพระเจ้า ^^ คุณสามารถโพสต์วิธีกำหนดค่าทดสอบให้กับตัวแปรได้nอย่างไร ฉันไม่รู้จัก Julia เลย;)
Knerd

@Knerd - ฉันได้แก้ไขแล้วค่ะหวังว่าจะช่วยได้
เกลน O

เยี่ยมมากขอบคุณ ฉันพยายามทดสอบในภายหลัง :)
Knerd

การเปลี่ยนแปลงเล็กน้อย - เปลี่ยนตัวแปรจากnเป็นAเพื่อลดผลรวมจาก 988 เป็น 943
เกลน O

ตกลงการเปลี่ยนแปลงที่ใหญ่กว่ามาก - ฉันรู้ว่าคุณสามารถรวมสตริงได้โดยตรงแทนที่จะแยกอักขระด้วย.data; แต่เนื่องจากเป็นอักขระพวกเขาสร้างผลลัพธ์อักขระสำหรับจำนวนอักขระที่แปลก การคูณด้วย 1 จะแก้ไขว่า
เกลน O

2

K5, 2 ไบต์ (ฟังก์ชัน), 5 ไบต์ (โปรแกรม)

ฟังก์ชัน

+/

โปรแกรม

+/0:`

ไม่แน่ใจว่า K5 ถูกสร้างขึ้นก่อนหรือหลังความท้าทายนี้ถูกโพสต์ ไม่ว่า ... มันยอดเยี่ยมมาก !!

ใน K5 ถ้าคุณทำการดำเนินการทางคณิตศาสตร์กับสตริงมันจะแปลงอักขระเป็นรหัส ASCII นี่ก็แค่ใช้ตัวดำเนินการผลรวม+/(ที่จริงแล้วมันคือบวก + มากกว่า)


2

Matlab / Octave 4 ไบต์ (โบนัส: 405)

รหัสนี้เป็นฟังก์ชั่นที่ไม่ระบุชื่อซึ่งทำหน้าที่มันจะใช้สตริงและส่งกลับหมายเลขที่ต้องการ

@sum

ผมไม่แน่ใจว่าเกี่ยวกับgs2คำตอบ sum(A)แต่อย่างน้อยด้วยวิธีการเช่นเดียวกับคำตอบที่จูเลียที่ฉันควรจะยังคงเขียน ฉันคิดว่าsumอยู่คนเดียวไม่เป็นไร (จะไม่ถูกต้องรหัส =)
ข้อบกพร่อง

2

ไป (59 ตัวอักษร)

func d(s string)(t int){for _,x:=range s{t+=int(x)};return}

ทุกอย่างใน Go คือ utf8 โดยค่าเริ่มต้น Codetext ใน `delimeters ที่เรียกใช้ผ่านตัวมันเองจะให้ผลลัพธ์ของ: 5399


ฉันต้องบอกว่าฉันค่อนข้างประหลาดใจที่ไม่มีmath.Sumให้ใช้กับmapหรือคล้ายกัน
แมว


2

Gol> <> , 4 ไบต์ (ไม่แข่งขัน)

หมายเหตุ: ภาษานี้ใหม่กว่าความท้าทาย

iEh+

มันออกเสียงเหมือน 'Golfish หรือไม่?'
แมว

@cat ใช่มันเป็นเรื่องไร้สาระ
Randomra

@randomra นั่นคือ "gol • fish" หรือ "golf • ish" หรือเปล่า? เหมือนในปลาที่มี gol หรืออะไรทำนองกอล์ฟ?
Cyoce


2

Python ขนาด 24 ไบต์

นี่คือสั้นกว่าโซลูชัน Python ใด ๆ : ฟังก์ชันที่ไม่ระบุชื่อซึ่งใช้สตริงเป็นอาร์กิวเมนต์และส่งคืนผลรวม

lambda x:sum(x.encode())

ลองออนไลน์!

ขั้นแรกให้x.encode()เปลี่ยนเป็นbytesวัตถุ จากนั้นsumเพิ่มค่ารหัสตัวอักษร เนื่องจากนี่คือฟังก์ชันแลมบ์ดา

นอกจากนี้หนึ่งอาจมีlambda x:sum(map(ord,x))จำนวนไบต์เดียวกัน


2

SML, 42 36

เพียงเพิ่มภาษาอื่น

fun$x=foldl op+0(map ord(explode x))

แปลง String ไปเป็นอาร์เรย์ถ่านคำนวณหมายเลข ascii ของแต่ละค่าและคำนวณผลรวมของตัวเลข ASCII ทั้งหมด


1
;คุณสามารถวางพื้นที่และบางชั้นนำ 36 ไบต์: tio.run/##DcpBCoAgEAXQq0zRQomiC7ivdYuWEWgRfB2xKby9uXzwHo/ …
Laikoni

1

ค 32

f(char*s){return*s?*s+f(s+1):0;}

main(int argc,char **argv){return(argc?main(0,&(argv[1])):(**argv?**argv+main(0,argv)+((*argv)++?0:0):0));}(107 ตัวอักษร) แม้ว่ามันจะไม่สนใจตัวอักษรแรกด้วยเหตุผลบางอย่าง นอกจากนี้รหัสทางออก POSIX มีเพียง 8 บิตเท่านั้น echo $?ในทุบตี

กฎค่อนข้างกว้างเล็กน้อยดังนั้นฉันจึงไม่ได้ใช้หลัก ฉันจะทำงานในสิ่งที่อาจจะสั้น
bebe

@bebe ผมเปลี่ยนกฎเล็กน้อยที่จะทำให้มันชัดเจนว่าเป็นสิ่งจำเป็น;)
Knerd

1

D (ฟังก์ชั่น: 60)

ไม่อย่างแน่นอนที่จะชนะมัน

สมมติว่ามันไม่จำเป็นต้องเป็นโปรแกรมที่สมบูรณ์

int c(string i){int s;foreach(e;i){s+=cast(int)e;}return s;}

เรียกได้ว่าเป็นอย่างนั้น

void main ()
{
    import std.stdio;
    auto hw = "Hello World!";
    writefln("%s = %d", hw, c(hw));
}

เอาท์พุท:

Hello World! = 1085

D (โปรแกรม: 133)

ไม่นับการขึ้นบรรทัดใหม่

void main(){import std.algorithm,std.stdio;stdin.byLine.map!((a){int s;foreach(e;a){s+=cast(int)e;}return s;}).reduce!"a+b".writeln;}

ด้วยช่องว่างที่มากขึ้นและชื่อตัวแปรที่ยาวขึ้นเพื่อความสะดวกในการอ่าน

void main () {
    import std.algorithm, std.stdio;

    stdin.byLine
        .map!((line) {
                int sum;
                foreach (ch; line) {
                    sum += cast(int)ch;
                }
                return sum;
            })
        .reduce!"a+b"
        .writeln;
}

เพื่อรองรับการขึ้นบรรทัดใหม่ในอินพุตฉันสามารถใช้byLine(KeepTerminator.yes)- วิธีที่ถูกต้องสำหรับ 20 ตัวอักษร - หรือต่อท้าย'\n'บรรทัดของฉัน - ซึ่งแบ่งอินพุตบรรทัดเดียวและอาจให้ผลรวมผิดบน Windows เนื่องจาก CRLF สำหรับ 18 ตัวอักษร


+1 สำหรับการโพสต์แม้ว่าคุณจะรู้ว่าคุณจะไม่ชนะ
Knerd

1

JavaScript (ES6) 54 58

alert([].reduce.call(prompt(),(v,c)=>v+c.charCodeAt(0),0))

ขอบคุณ 54 ไบต์ถึงขีดล่าง :

alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))

ใช้งานได้ดีฉันลองใช้งานตอนนี้ในes6fiddle.net
Knerd

คุณสามารถใช้ Firefox;)
core1024

1
ฉันทำงานอยู่ดังนั้น: D
Knerd

1
54:alert([...prompt()].reduce((v,c)=>v+c.charCodeAt(),0))
ขีดล่าง

1
รับไปที่ 51 ทันที :)alert([...prompt(x=0)].map(y=>x+=y.charCodeAt())|x)
nderscore

1

Delphi ( 87 83)

function x(s:string):int64;var c:char;begin x:=0;for c in s do x:=result+ord(c)end;

Ungolfed

function x(s:string):int64;
var
  c:char;
begin
  x:=0;
  for c in s do
    x:=result+ord(c)
end;

วนซ้ำผ่านSการเพิ่มordค่าของ char ไปยังผลลัพธ์ โดยที่ x == ผล

การแก้ไข:

บันทึก 4 ตัวอักษรโดยเปลี่ยนเป็น int64 และเปลี่ยนการเพิ่มเป็นผลรวม


คุณมีเวอร์ชันฟรีของ Delphi (แทรกเวอร์ชันที่คุณใช้ที่นี่) หรือไม่?
Knerd

อืม .. ไม่เสียใจจริงๆ แต่ฉันสามารถอธิบายสิ่งที่เกิดขึ้นที่ไหนและทำ testcase บางอย่างถ้าคุณต้องการ ปาสคาลฟรีมีไวยากรณ์เดียวกันมากกว่าหรือน้อยกว่าดังนั้นคุณสามารถทำเช่นนั้นได้
Teun Pronk

ตกลงฉันจะตรวจสอบว่า
Knerd


1

J (7)

ใกล้ แต่ยังไกล ... อืมฉันเดาว่า 7 ดีพอเนื่องจากคำตอบนี้ก็ยอมรับสตริงว่าง ๆ (ฉันอ้างอิงการใช้ตัวแปรเป็นอินพุตของวลีfrom a file, stdin or whatever)

+/a.i.b

คำอธิบาย:

a.

┌┬┐├┼┤└┴┘│─ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������

a. มีตัวอักษร ASCII ทั้งหมด

   'people' i. 'pow'
0 2 6

x i. y[x.index(i) for i in y]จะคล้ายกับของงูหลาม

   a. i. 'Hello World!'
72 101 108 108 111 32 87 111 114 108 100 33

ดังนั้นa. i. yแปลงyเป็นอาร์เรย์ของค่า ASCII

   +/1 2 3 4 5 6
21

+/เป็นเช่นsum: +/1 2 3 4 5 6หมายถึง1+2+3+4+5+6

   +/ a. i. 'Hello World!'
1085

ในการดำเนินการทั้งหมด

สำหรับโบนัส:

   b=:'+/a.i.b'
   +/a.i.b
482

ไม่เลวฉันเดา

   b=:'0\{+}/'
   +/a.i.b
478

อืม

   A=:'+/a.i.A'
   +/a.i.A
449

ขอบคุณ @ อัลกอริทึม

    A=:'+/3 u:A'
    +/3 u:A
413

ขอบคุณ @marinus


+1 สำหรับคำอธิบายที่ดี คำถามเล็ก ๆ น้อย ๆ หนึ่งที่ฉันสามารถรัน J ได้ดีที่สุด
Knerd

1
@ Knerd จากผู้ผลิต ( jsoftware.com ) ฉันเดาว่าฉันไม่รู้จักล่ามออนไลน์ (ความจริงแล้วสนุก: พวกเขามีคอนโซลอย่างเป็นทางการสำหรับ Android) jsoftware.com/download/j801
ɐɔıʇǝɥʇuʎs

@Synthectica นั่นเจ๋ง: D ตอนนี้ฉันต้องการสมาร์ทโฟน Android: P
Knerd

เปลี่ยนชื่อbเป็นAผลลัพธ์ในคะแนน 449.
algorithmshark

@algorithmshark โอ้ใช่แล้ว! ฉันจะอ้างสิทธิ์ดาวดวงนั้นตอนนี้;)
Junıʇǝɥʇuʎs

1

R, 35 ตัวอักษร (รวม 3086) 26 ไบต์ (รวม 2305)

sum(utf8ToInt(readline()))

readline()มีความยาวเกินหนึ่งตัวscan(,"")แต่scanแยกอินพุตในช่องว่างโดยค่าเริ่มต้น

การใช้งาน:

> sum(utf8ToInt(readline()))
Hello World!
[1] 1085
> sum(utf8ToInt(readline()))
sum(utf8ToInt(readline()))
[1] 2305
> sum(utf8ToInt(readline()))
q/%8hnp>T%y?'wNb\},9krW &D9']K$n;l.3O+tE*$*._B^s!@k\&Cl:EO1zo8sVxEvBxCock_I+2o6 yeX*0Xq:tS^f)!!7=!tk9K<6#/E`ks(D'$z$\6Ac+MT&[s[]_Y(`<g%"w%cW'`c&q)D$0#C$QGf>?A$iawvc,}`9!('`c&q)D$0#C$QGf>?A$iawvc,}`9!(
[1] 14835

1

Japtet , 6 ไบต์ (ไม่ใช่การแข่งขัน)

คำตอบนี้ไม่สามารถแข่งขันได้เพราะ Japt ถูกสร้างขึ้นหลังจากมีการโพสต์ความท้าทายนี้

U¬mc x

ค่อนข้างง่าย ลองออนไลน์!

มันทำงานอย่างไร

U¬mc x  // Implicit: U = input string
U¬      // Split U into chars.
  mc    // Map each item to its char code.
     x  // Sum.
        // Implicit: output last expression

ด้วยความอยากรู้อยากเห็นทำไมคุณไม่ให้¬การปฏิเสธบางอย่าง?
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴเพราะฉันรีบและมอบหมายให้พวกเขาเมื่อฉันเห็นความต้องการโดยไม่ต้องวางแผนล่วงหน้า ฉันมีชุดที่พร้อมจะใช้งานได้ดีขึ้นโดยการเปลี่ยนรหัสหนึ่งบรรทัด แต่ฉันรู้สึกผิดเพราะมันทำให้โมฆะคำตอบที่มีอยู่เกือบทั้งหมด
ETHproductions

นั่นเป็นการแก้ไขที่ง่าย เพิ่มเงื่อนไขให้กับส่วนหัว (เช่น, url/interpreter.html#new=1); สิ่งใดก็ตามที่ไม่มีมันจะใช้ชุดอักขระเก่าและสิ่งใดก็ตามที่ใช้มันจะใช้ชุดอักขระใหม่
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴขอบคุณฉันจะพิจารณามัน
ETHproductions

1

PlatyPar 2 ไบต์ (ไม่แข่งขัน)

us

ลองออนไลน์ !

uสร้างอาร์เรย์ของค่า charcode ทั้งหมดในสตริงอินพุตและsค้นหาผลรวม

เมื่อทำงานกับมันมันจะกลับ232มา

นี่คล้ายกับคำตอบ Jolfของ Conor ยกเว้นว่าฉันใช้ byte เพื่อแปลงสตริงเป็นอาร์เรย์ของรหัสอักขระ (ซึ่งเป็นนัยใน Jolf) ในขณะที่เขาใช้ byte เพื่อดึงข้อมูล (ซึ่งเป็นนัยใน PlatyPar)

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