เพิ่มตัวเลขสองตัว


44

อินพุต:สองจำนวนเต็ม เลขจำนวนเต็มฐานสิบที่เด่นกว่า แต่สามารถใช้ตัวเลขในรูปแบบอื่นได้ สิ่งเหล่านี้สามารถให้กับรหัสในอินพุตมาตรฐานเป็นอาร์กิวเมนต์ของโปรแกรมหรือฟังก์ชันหรือเป็นรายการ

ผลลัพธ์:ผลรวมของพวกเขา ใช้รูปแบบเดียวกันสำหรับจำนวนเต็มเอาต์พุตเป็นจำนวนเต็มอินพุท ยกตัวอย่างเช่นการป้อนข้อมูลที่จะนำไปสู่การส่งออก5 1621

ข้อ จำกัด :ไม่มีช่องว่างมาตรฐานกรุณา นี่คือคำตอบในจำนวนไบต์ต่ำสุดที่ชนะ

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

กรณีทดสอบ:

1 2 -> 3
14 15 -> 29
7 9 -> 16
-1 8 -> 7
8 -9 -> -1
-8 -9 -> -17

หรือเป็น CSV:

a,b,c
1,2,3
14,15,29
7,9,16
-1,8,7
8,-9,-1
-8,-9,-17

ลีดเดอร์บอร์ด


26
นี่เป็นเรื่องเล็กน้อย แต่ไม่ง่ายกว่าเช่นแคตตาล็อก Hello World เนื่องจากความสามารถในการเพิ่มจำนวนเต็มเป็นหนึ่งในสองข้อกำหนดของเราสำหรับภาษาการเขียนโปรแกรมฉันว่ามันคุ้มค่าหากมีการระบุอย่างถูกต้อง
Dennis

1
คำตอบสามารถป้อนด้วยศูนย์ก่อนหน้าเป็นค่าเริ่มต้นได้หรือไม่ เช่น5 16ป้อนเข้าเป็น005 016
FinW

@FinW แน่นอน ตราบใดที่พวกเขาไม่ได้ตีความว่าเป็นฐานแปด
dkudriavtsev

คำตอบ:



66

Minecraft 1.10, 221 ตัวละคร (ไม่แข่งขัน)

ดูนี่คือสิ่งที่เราต้องจัดการเมื่อเราสร้างแผนที่ Minecraft

นอกเหนือ: ไม่มีทางที่จะป้อนข้อมูลสตริงใน Minecraft ดังนั้นฉันจึงโกงนิดหน่อยโดยทำให้คุณใส่ตัวเลขลงในโปรแกรม (มันค่อนข้างสมเหตุสมผลเนื่องจากแผนที่ค่อนข้างน้อยเช่น Minecraft Bingo ของ Lorgon111 คุณต้องคัดลอกและวางคำสั่งลงในการแชทเพื่อป้อนตัวเลข)

ขอบคุณ abrightmoore สำหรับตัวกรองBlock MCEdit

a

scoreboard objectives add a dummy
scoreboard players set m a 6
scoreboard players set n a 8
scoreboard players operation r a += m a
scoreboard players operation r a += n a
tellraw @a {"score":{"name":"r","objective":"a"}}

ไม่ใช่การแข่งขันเนื่องจากมีปัญหาในการป้อนข้อมูลและฉันไม่ทราบวิธีนับไบต์ในสิ่งนี้ (ระบบ blytes มีข้อบกพร่องสำหรับบล็อกคำสั่ง)


4
นี่คือสิ่งที่ดีที่สุด น่าอัศจรรย์
dkudriavtsev

ฉันไม่คิดว่าการเข้ารหัสแบบ hardcoding นั้นถูกต้อง แต่ฉันไม่รู้มากพอเกี่ยวกับ command block ใน Minecraft ที่จะสามารถตัดสินได้ว่ามีวิธีในการป้อนข้อมูลอื่นนอกเหนือจากการเข้ารหัสหรือไม่ บางทีผู้เชี่ยวชาญ Minecraft คนใดคนหนึ่งในบ้านของเราอาจชั่งน้ำหนักได้
Mego

3
ใช่มีการป้อนข้อความเป็นศูนย์ใน MC นอกเหนือจาก "โปรดคัดลอกและวางคำสั่งนี้" ปุ่มกดตัวเลขเป็นไปได้ด้วย / tellraw แต่จะสามารถใช้งานได้ทุกสนามกอล์ฟไม่ต้องพูดถึง 500kb ด้วย / ซินแท็คซ์ของไวยากรณ์ที่เข้มงวดอย่างหยาบคาย ฉันเดาว่าจะมีทางเลือกอื่นที่จะนับบางสิ่งในโลกเช่นหมู + วัวหรือขนแกะสีแดง + ขนสีน้ำเงิน
ไตรมาส

1
@quat เนื่องจากเรามักจะใช้สิ่งที่กระโดดเพื่อนับสิ่งต่าง ๆ ใน minecraft ฉันคิดว่ามันจะเป็นวิธีที่จะไป อีกวิธีหนึ่งในการจัดการกับเรื่องนี้จะทำได้ในการจับกลุ่มบริสุทธิ์ด้วยการใช้คันโยก เนื่องจากเราไม่มีข้อ จำกัด ใด ๆ และบิตเป็นค่าธรรมชาติที่ใหญ่ที่สุดที่สามารถเข้าถึงได้ใน minecraft ซึ่งจะส่งผลให้เพิ่มสองบิตด้วยเอาต์พุตสองบิต (ความเป็นไปได้: 0,1,2. วิธีแก้ปัญหาอื่นจะใช้ 2 ไบต์และ เอาท์พุทบน 9 สาย แต่จะน้อย golfy
Katenkyo


39

แคลคูลัสแลมบ์ดาไบนารี , 4.125 ไบต์

input และ output เป็นตัวเลขคริสตจักร

00000000 01011111 01100101 11101101 0

ในแคลคูลัสแลมบ์ดามันเป็นλ เมตร λ n λ f . λ x m f ( n f x )

ดัชนี De Bruijn : λλλλ 4 2 (3 2 1)


แลมบ์ดาแคลคูลัสเป็นวิธีที่กระชับในการอธิบายการทำแผนที่ (ฟังก์ชั่น)

ยกตัวอย่างเช่นงานนี้สามารถเขียนเป็นλ x λ Y x + y

สิ่งที่ควรทราบคือนี่ไม่ใช่แลมบ์ดา (ฟังก์ชัน) ซึ่งรับสองอาร์กิวเมนต์ นี่คือแลมบ์ดาที่ซ้อนกัน อย่างไรก็ตามมันทำตัวเหมือนแลมบ์ดาซึ่งรับสองข้อโต้แย้งดังนั้นมันสามารถอธิบายได้อย่างไม่เป็นทางการเช่นนี้ แลมบ์ดาทุกคนรับอย่างเป็นทางการเพียงครั้งเดียว

ตัวอย่างเช่นถ้าเราใช้แลมบ์ดานี้กับ 3 และ 4:

x . λ y . x + y ) 3 4 ≡ (λ y . 3 + y ) 4 ≡ 3 + 4 = 7

ดังนั้นแลมบ์ดาตัวแรกจะส่งกลับแลมด้าอีกครั้งหนึ่ง


เลขคริสตจักรเป็นวิธีในการทำไปด้วยเครื่องหมายพิเศษทิ้งไว้โดยมีสัญลักษณ์แลมด้าและตัวแปร

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

ให้ฟังก์ชั่นเป็นFและรายการที่จะx

ดังนั้นหมายเลข 1 จะสอดคล้องกับλ ฉ λ x f xซึ่งหมายถึงใช้fกับxหนึ่งครั้ง

จำนวน 3 ตัวอย่างเช่นจะλ ฉ λ x f ( f ( f x )) ซึ่งหมายถึงใช้กับfถึงxสามครั้ง


ดังนั้นเพื่อเพิ่มสองคริสตจักรเลข (พูด, ม.และn ) ด้วยกันก็เป็นเช่นเดียวกับการใช้Fเพื่อx , ม. + nครั้ง

เราสามารถสังเกตเห็นว่าเรื่องนี้เป็นเช่นเดียวกับการใช้ครั้งแรกไปx , nครั้งแล้วใช้Fที่จะส่งผลให้รายการครั้ง

ยกตัวอย่างเช่น2จะหมายถึงf(f(x))และ3จะหมายถึงf(f(f(x)))เพื่อให้2 + 3f(f(f(f(f(x)))))จะเป็น

เมื่อต้องการใช้ไปx , nครั้งเรามีn x

คุณสามารถดูmและnเป็นฟังก์ชั่นรับสองอาร์กิวเมนต์อย่างไม่เป็นทางการ

จากนั้นเราใช้fกับรายการผลลัพธ์นี้อีกครั้งm : m f ( n f x )

จากนั้นเราจะเพิ่มกลับสำเร็จรูปเพื่อให้ได้λ เมตร λ n λ f . λ x m f ( n f x )


ตอนนี้เราจะต้องแปลงเป็นดัชนี De Bruijn

ประการแรกเรานับ "ระยะทางสัมพัทธ์" ระหว่างตัวแปรแต่ละตัวกับการประกาศแลมบ์ดา ตัวอย่างเช่นmจะมีระยะทาง 4 เนื่องจากมีการประกาศ 4 lambdas "ที่ผ่านมา" ในทำนองเดียวกันnจะมีระยะทาง 3, fจะมีระยะทาง 2 และxจะมีระยะทาง 1

ดังนั้นเราเขียนมันเป็นรูปแบบกลางนี้: λ เมตร λ n λ f . λ x 4 2 (3 2 1)

จากนั้นเราลบการประกาศตัวแปรทิ้งเราไว้กับ: λλλλ 4 2 (3 2 1)


ตอนนี้เราแปลงเป็นแคลคูลัสแลมบ์ดาไบนารี

กฎคือ:

  • 00λจะกลายเป็น
  • ม. n (จัดกลุ่ม) 01 m nจะกลายเป็น
  • หมายเลขฉันจะกลายเป็น1 ฉันครั้ง + 0เช่น 4 11110กลายเป็น

λλλλ 4 2 (3 2 1)

≡λλλλ 11110 110( 1110 110 10)

≡λλλλ 11110 110 0101 111011010

≡λλλλ 0101 111101100101111011010

00 00 00 00 0101 111101100101 111011010

000000000101111101100101111011010


18
ฉันต้องการดูไฟล์ต้นฉบับ 4.125 ไบต์ที่คุณส่งผ่านไปยังตัวแปล / ตัวแปล
Martin Ender

8
@MartinEnder บอกว่าทุกคำตอบที่นี่
Leun Nun

5
ฉันต้องการดูวิธีแก้ปัญหา 0.875 ไบต์
นาย Lister

3
โดยฉันทามติ metaเว้นแต่คุณจะสามารถเก็บโปรแกรมเป็นไฟล์ที่มีจำนวนเศษส่วนคุณจะต้องปัดเศษ
Pavel

24

Common Lisp 15 ไบต์

(+(read)(read))

2
ยินดีต้อนรับสู่ Programming Puzzles & Code Golf!
Dennis

ฉันค่อนข้างไม่คุ้นเคยกับ CLisp แต่เป็นไปได้ไหมที่จะลบช่องว่างออก? (+(read)(read))
Mego

@Mego คุณถูกต้องมันเป็นไปได้ ฉันไม่รู้ว่าเพราะฉันยังใหม่กับ Common LISP ขอบคุณสำหรับข้อมูล! ฉันแก้ไขต้นฉบับ
Byeonggon Lee

3
ฉันเดาว่าเราทั้งคู่เรียนรู้อะไรบางอย่างที่นี่! ยินดีต้อนรับสู่ PPCG!
Mego

21

Stack Cats , 8 + 4 = 12 ไบต์

]_:]_!<X

วิ่งด้วย-mnธง ลองออนไลน์!

การเล่นกอล์ฟใน Stack Cats เป็นเกมที่ใช้ง่ายมากดังนั้นโปรแกรมนี้จึงพบได้ในเวลาไม่กี่วัน สำหรับการเปรียบเทียบโซลูชันที่ใช้งานง่ายและเป็นมนุษย์ที่เขียนขึ้นโดยใช้*(...)>เทมเพลตนั้นยาวกว่าสองไบต์

*(>-_:[:)>

ด้วย-lnธงแทน (ดูด้านล่างของโพสต์นี้สำหรับคำอธิบาย)

คำอธิบาย

นี่คือไพรเมอร์ใน Stack Cats:

  • Stack Cats เป็นภาษาลึกลับที่สามารถย้อนกลับได้ซึ่งกระจกของตัวอย่างจะเลิกทำผลของตัวอย่างต้นฉบับ โปรแกรมต้องเป็นภาพสะท้อนของตัวเองด้วย - จำเป็นซึ่งหมายความว่าโปรแกรมที่มีความยาวแม้จะเป็นแบบไม่มี ops หรือลูปที่ไม่มีที่สิ้นสุดและโปรแกรมที่ไม่สิ้นสุดทั้งหมดนั้นมีความยาวคี่
  • เนื่องจากโปรแกรมครึ่งหนึ่งบอกเป็นนัยเสมอจึงสามารถทิ้งครึ่งหนึ่งไว้ด้วย-mหรือ-lตั้งค่าสถานะ นี่คือธงถูกนำมาใช้เพื่อให้โปรแกรมครึ่งข้างต้นจริงขยาย-m]_:]_!<X>!_[:_[
  • ตามชื่อของมันแนะนำ Stack Cats เป็นแบบสแต็กโดยที่สแต็กเป็นส่วนท้ายด้วยเลขศูนย์ Stack แมวจริงใช้เทปกองเช่น<และ>ย้ายหนึ่งสแต็คซ้ายและขวาตามลำดับสแต็ค
  • ศูนย์ที่ด้านล่างของสแต็กถูกกลืน / เอาออก
  • อินพุตทั้งหมดถูกส่งไปยังอินพุตเริ่มต้นพร้อมกับอินพุตแรกที่ด้านบนและเพิ่ม -1 ด้านล่างของอินพุตสุดท้าย เอาท์พุทจะทำในตอนท้ายโดยใช้เนื้อหาของสแต็คปัจจุบัน (กับตัวเลือก -1 ที่ด้านล่างจะถูกละเว้น) -nหมายถึง I / O ที่เป็นตัวเลข

และนี่คือร่องรอยของโปรแกรมเต็มรูปแบบที่ขยาย]_:]_!<X>!_[:_[:

    Initial state (* denotes current stack):
      ... [] [-1 b a]* [] [] ...
]   Move one stack right, taking the top element with you
      ... [] [-1 b] [a]* [] ...
_   Reversible subtraction, performing [x y] -> [x x-y] (uses an implicit zero here)
      ... [] [-1 b] [-a]* [] ...
:   Swap top two
      ... [] [-1 b] [-a 0]* [] ...
]   Move one stack right, taking the top element with you
      ... [] [-1 b] [-a] []* ...
_   Reversible subtraction (0-0, so no-op here)
!   Bit flip top element, x -> -x-1
      ... [] [-1 b] [-a] [-1]* ...
<   Move one stack left
      ... [] [-1 b] [-a]* [-1] ...
X   Swap the stack to the left and right
      ... [] [-1] [-a]* [-1 b] ...
>   Move one stack right
      ... [] [-1] [-a] [-1 b]* ...
!   Bit flip
      ... [] [-1] [-a] [-1 -b-1]* ...
_   Reversible subtraction
      ... [] [-1] [-a] [-1 b]* ...
[   Move one stack left, taking the top element with you
      ... [] [-1] [-a b]* [-1] ...
:   Swap top two
      ... [] [-1] [b -a]* [-1] ...
_   Reversible subtraction
      ... [] [-1] [b a+b]* [-1] ...
[   Move one stack left, taking the top element with you
      ... [] [-1 a+b]* [b] [-1] ...

a+bถูกส่งออกแล้วโดยที่ฐาน -1 จะถูกละเว้น โปรดทราบว่าส่วนที่ยากที่สุดเกี่ยวกับโซลูชันนี้คือเอาต์พุตสแต็กต้องมี-1ที่ด้านล่างมิฉะนั้นเอาต์พุตสแต็กของเพิ่ง[-1]จะไม่สนใจฐาน -1 และเอาต์พุตสแต็กของ[0]จะทำให้ฐานศูนย์ถูกกลืน (แต่เอาต์พุต[2]ตัวอย่างเช่นสแต็คของจะส่งออกได้2ดี)


เพียงเพื่อความสนุกนี่คือรายการทั้งหมดของโซลูชันที่เกี่ยวข้องที่มีความยาวเท่ากัน (รายการอาจไม่สมบูรณ์):

]_:]^!<X
]_:]_!<X
]_:]!^<X
]_:!]^<X
[_:[^!>X
[_:[_!>X
[_:[!^>X
[_:![^>X

*(>-_:[:)>แก้ปัญหาคืออีกต่อไป แต่จะง่ายมากขึ้นในการเขียนเพราะมันใช้*(...)>แม่แบบ เทมเพลตนี้ขยายเป็น<(...)*(...)>เมื่อใช้กับ-lแฟล็กซึ่งหมายความว่า:

<       Move one stack left
(...)   Loop - enter if the top is positive and exit when the top is next positive again
        Since the stack to the left is initially empty, this is a no-op (top is 0)
*       XOR with 1 - top of stack is now 1
(...)   Another loop, this time actually run
>       Move one stack right

เช่นนี้*(...)>แม่แบบหมายความว่าวงแรกคือข้ามไป แต่ครั้งที่สองจะถูกดำเนินการ สิ่งนี้ช่วยให้การเขียนโปรแกรมตรงไปตรงมามากขึ้นเนื่องจากเราไม่จำเป็นต้องกังวลเกี่ยวกับผลกระทบของลูปในอีกครึ่งหนึ่งของโปรแกรม

ในกรณีนี้ด้านในของลูปคือ:

>       Move one stack right, to the input stack
-       Negate top, [-1 b a] -> [-1 b -a]
_       Reversible subtraction, [-1 b -a] -> [-1 b a+b]
:       Swap top two, [-1 b a+b] -> [-1 a+b b]
[       Move one stack left, taking top of stack with you (removing the top b)
:       Swap top two, putting the 1 on this stack on top again

สุดท้าย>ในเทมเพลตจะย้ายเรากลับไปที่สแต็กอินพุตซึ่งa+bถูกเอาต์พุต


19

สะเก็ดระเบิดสมองขนาด 6 ไบต์

({}{})

ลองออนไลน์!

Brain-flak เป็นภาษาที่น่าสนใจและมีข้อ จำกัด สองประการ

  1. อักขระที่ใช้ได้คือวงเล็บเท่านั้นคืออักขระใด ๆ เหล่านี้:

    (){}[]<>
    
  2. วงเล็บทุกชุดจะต้องตรงกันทั้งหมดมิฉะนั้นโปรแกรมจะไม่ถูกต้อง

ชุดของวงเล็บที่ไม่มีอะไรระหว่างมันถูกเรียกว่า "nilad" nilad สร้างค่าตัวเลขที่แน่นอนและ nilads เหล่านี้ทั้งหมดที่อยู่ติดกันจะถูกรวมเข้าด้วยกัน ชุดของวงเล็บกับบางสิ่งบางอย่างระหว่างพวกเขาถูกเรียกว่า "monad" Monad เป็นฟังก์ชันที่รับอาร์กิวเมนต์ตัวเลข ดังนั้นวงเล็บใน monad จึงถูกประเมินและนั่นคือเหตุผลของ monad นี่คือตัวอย่างที่เป็นรูปธรรมมากขึ้น

() niladเท่ากับ 1 ดังนั้นรหัสสมองสะเก็ดระเบิดต่อไปนี้:

()()()

ได้รับการประเมินเป็น 3 () monadผลักดันค่าภายในของมันบนสแต็คส่วนกลาง ดังนั้นต่อไปนี้

(()()())

ผลัก 3. {}nilad ปรากฏค่าที่ด้านบนของสแต็ค เนื่องจากมีการเพิ่ม nilads ที่ต่อเนื่องกันเสมอสตริงของ{}ผลรวมขององค์ประกอบด้านบนทั้งหมดในสแต็ก ดังนั้นรหัสของฉันเป็นหลัก:

push(pop() + pop())

15

Minecraft 1.10.x, 924 512 ไบต์

ขอบคุณ @ quatสำหรับการลด blytecount 48 คะแนนและ bytecount 412

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

กลุ่ม

(เวอร์ชั่นใหม่ดูน่าเบื่อเลย)

คำสั่งที่คล้ายกันเป็นคำตอบอื่น ๆ :

scoreboard objectives add a dummy
execute @e[type=Pig] ~ ~ ~ scoreboard players add m a 1
execute @e[type=Cow] ~ ~ ~ scoreboard players add n a 1
scoreboard players operation n a += m a
tellraw @a {"score":{"name":"n","objective":"a"}}

หากต้องการใส่หมายเลขให้วางไข่ในจำนวนวัวและหมู วัวจะแสดงค่า "n" และหมูจะแสดงค่า "m" ระบบบล็อกคำสั่งจะฆ่าวัวและหมูอย่างต่อเนื่องและกำหนดค่าตามความจำเป็น

คำตอบนี้อนุมานว่าคุณอยู่ในโลกที่ไม่มีวัวหรือหมูเกิดขึ้นตามธรรมชาติและค่าที่เก็บใน "n" และ "m" จะถูกล้างในแต่ละการวิ่ง


สำหรับจำนวนเต็มลบคุณสามารถใช้สัตว์อีก 2 ชนิดเป็น "neganimals" - ม้า 5 ตัวสามารถแทนค่า -5 ได้
Mego

@Mego แล้วมันจะเป็นสี่อินพุตไม่ใช่ 2
Addison Crump

มันจะยังคงเป็นสองอินพุต - มันเทียบเท่ากับการใช้ส่วนประกอบสองอย่างสำหรับจำนวนลบ รูปแบบที่แตกต่างกันเล็กน้อย แต่ยังคงเป็นหนึ่งอินพุต อย่างน้อยนั่นคือเงินสองเซ็นต์ของฉัน
Mego

อาจสามารถบันทึกบนบล็อกโดยใช้execute @e[type=Pig] ~ ~ ~ scoreboard players add m a 1ดังนั้นคุณไม่จำเป็นต้องใช้รูปแบบนาฬิกาใด ๆ
quat

@quat Ooh ดี
Addison Crump

14

เรติน่า 42 ไบต์

\d+
$*
T`1p`-_` |-1+
+`.\b.

^(-)?.*
$1$.&

ลองออนไลน์!

คำอธิบาย

การเพิ่มตัวเลขในภาษาเดียวคือสิ่งที่ง่ายที่สุดในโลก แต่เมื่อคุณแนะนำตัวเลขที่เป็นลบสิ่งต่าง ๆ ก็จะยุ่งเหยิง ...

\d+
$*

เราเริ่มต้นด้วยการแปลงตัวเลขเป็นเอกภาพ นี้จะกระทำโดยการจับคู่จำนวนแต่ละคนมีและแทนที่ด้วย\d+ $*นี่เป็นคุณลักษณะทดแทนเฉพาะของจอประสาทตา ไวยากรณ์เต็มcount$*characterและแทรกสำเนาของcount characterทั้งของผู้ที่สามารถละเว้นที่countค่าเริ่มต้น$&(เช่นการจับคู่ของตัวเอง) และค่าเริ่มต้นcharacter 1ดังนั้นสำหรับแต่ละอินพุทnเราได้ค่าnมาและเรายังมีเครื่องหมายลบที่อาจเกิดขึ้นในนั้นรวมถึงตัวคั่นช่องว่าง เช่นการป้อนข้อมูล8 -5ให้:

11111111 -11111

ตอนนี้เพื่อที่จะจัดการกับตัวเลขติดลบก็ง่ายในการใช้แยก-1หลัก เราจะใช้-เพื่อจุดประสงค์นั้น

T`1p`-_` |-1+

ขั้นตอนนี้ทำสองสิ่ง มันกำจัดช่องว่างเครื่องหมายลบชั้นนำและเปลี่ยน1s หลังจากเครื่องหมายลบเป็น-ตัวของมันเอง สิ่งนี้ทำได้โดยการจับคู่ |-1+(เช่นช่องว่างหรือจำนวนลบ) และทำการทับศัพท์ การทับศัพท์เริ่มจาก1pไปที่-_แต่ที่นี่pจะขยายเป็นอักขระ ASCII ที่พิมพ์ได้ทั้งหมดและ_หมายถึงการลบ ดังนั้น1ในการแข่งขันเหล่านั้นได้กลายเป็น-s และ minuses และช่องว่างได้ถูกลบออก ตัวอย่างของเราตอนนี้ดูเหมือนว่านี้:

11111111-----
+`.\b.

สเตจนี้จัดการกับเคสที่มีจำนวนบวกและลบหนึ่งค่าในอินพุต หากเป็นเช่นนั้นจะมี1s และ-s อยู่ในสตริงและเราต้องการให้ยกเลิก สิ่งนี้ทำได้โดยการจับคู่อักขระสองตัวที่มีเส้นแบ่งระหว่างคำเหล่านั้น (เนื่องจาก1s ถือเป็นตัวอักษรคำและ-ไม่ใช่) และแทนที่การจับคู่ด้วยไม่มีอะไร +สั่ง Retina การทำเช่นนี้ซ้ำ ๆ จนกระทั่งสตริงหยุดการเปลี่ยนแปลง

ตอนนี้เราเหลือเพียง 1 s หรือs เท่านั้น -

^(-)?.*
$1$.&

การแปลงกลับไปทศนิยมเราตรงกับการป้อนข้อมูลทั้งหมด แต่ถ้าเป็นไปได้เราจับเข้าไปในกลุ่ม- 1เราเขียนกลุ่มกลับ1(เพื่อเพิ่ม a -ไปยังหมายเลขติดลบ) จากนั้นเราเขียนกลับความยาวของการจับคู่ด้วย$.&(เช่นคุณลักษณะการทดแทนเฉพาะ Retina)


2
มันฉลาดมาก
Mego

ตอนนี้ถ้ามีวิธีง่าย ๆ ที่จะใช้rangeใน Retina เท่านั้น ฉันเคยลองมาสองสามครั้งแล้ว แต่ข้อเสียคือความเจ็บปวด
mbomb007

ใช้เวลามากกว่า 40 ไบต์เพื่อเพิ่มตัวเลขสองตัวในภาษานี้?
dkudriavtsev

2
@DmitryKudriavtsev ดี Retina มีแนวคิดของตัวเลขไม่ ...
มาร์ตินเอนเดอร์

@DmitryKudriavtsev และนั่นเป็นเพียงจำนวนเต็ม ....
msh210

14

โดมิโน , 38,000 ไบต์หรือ 37 แผ่น

นี้ถูกสร้างขึ้นในโต๊ะจำลอง นี่คือวิดีโอและนี่เป็นไฟล์ มันเป็นบวกครึ่งมาตรฐานประกอบด้วยandประตูสำหรับ2^1ค่าสถานที่และxorประตูสำหรับ2^0ค่าสถานที่

ป้อนคำอธิบายรูปภาพที่นี่

รายละเอียด

  • I / O
    • เริ่ม - สิ่งนี้ถูกรวมไว้เพื่อความชัดเจน (ไม่นับรวมต่อ) และเป็นสิ่งที่ 'เรียก' หรือ 'เรียกใช้' ฟังก์ชั่น ควรจะ 'กด' หลังจากการป้อนข้อมูลจะได้รับ[เหลือง]
    • ใส่ - นี้จะรวมเพื่อความชัดเจน (ไม่นับรวม) และ 'กด' กับที่ระบุไว้1และไม่ได้กดสำหรับ[สีเขียว]0
    • อินพุต B - นี้จะรวมเพื่อความชัดเจน (ไม่นับรวม) และเป็น 'กด' กับที่ระบุไว้1และไม่ได้กดสำหรับ[สีน้ำเงิน]0
    • เอาท์พุท - นี่จะนับรวมต่อทั้งหมด แต้มเหล่านี้ประกาศผลรวม ด้านซ้ายเป็น2^1และเหมาะสมเป็น[สีดำ]2^0
  • การกด
    • หากต้องการป้อนหรือเริ่มต้นโซ่ให้วางหินอ่อนโลหะ
    • ตั้งค่าความแข็งแรงของลิฟต์เป็น 100%
    • ยกหินอ่อนขึ้นเหนือโดมิโนที่ต้องการ
    • วางหินอ่อน

1
... ได้อย่างไร
dkudriavtsev

4
@Mendeleev เมื่อคุณมีประตูเลขฐานสองตรรกะแล้วทุกอย่างก็จะกลายเป็น xD
NonlinearFruit

10

Haskell ขนาด 3 ไบต์

(+)

วงเล็บอยู่ที่นี่เพราะมันจะต้องมีฟังก์ชั่นคำนำหน้า สิ่งนี้เหมือนกับการใช้ส่วนของฟังก์ชัน + แต่ไม่มีการใช้อาร์กิวเมนต์ นอกจากนี้ยังทำงานกับหลากหลายประเภทเช่นการใช้งานอย่างถูกต้อง, เวกเตอร์, จำนวนเชิงซ้อน, ลอย, คู่, Rationals และจำนวนเต็มแน่นอน

เนื่องจากนี่คือ Haskell นี่คือวิธีการทำบนระดับประเภท สิ่งนี้จะกระทำในเวลารวบรวมแทนเวลาทำงาน:

-- This *type* represents Zero
data Zero
-- This *type* represents any other number by saying what number it is a successor to.
-- For example: One is (Succ Zero) and Two is (Succ (Succ Zero))
data Succ a

-- a + b = c, if you have a and b, you can find c, and if you have a and c you can find b (This gives subtraction automatically!)
class Add a b c | a b -> c, a c -> b

-- 0 + n = n 
instance Add Zero n n
-- If (a + b = c) then ((a + 1) + b = (c + 1))
instance (Add a b c) => Add (Succ a) b (Succ c)

รหัสดัดแปลงมาจากHaskell Wiki


3
สนุกจริง: นี่คือคนพูดได้หลายภาษากับ Cheddar: D
Downgoat

10

Mathematica, 4 2 ไบต์

Tr

การข้ามออก4ยังคงเป็นปกติ 4 ... Trนำไปใช้กับรายการหนึ่งมิติใช้ผลรวมขององค์ประกอบของรายการดังกล่าว


9

dc, 2 ไบต์

+f

เพิ่มชั้นสองรายการในสแต็ค (เอามาจากก่อนหน้านี้stdin) stdoutแล้วทิ้งเนื้อหาสแต็คที่จะ

แก้ไข:เมื่อพิจารณาเพิ่มเติมดูเหมือนว่ามีหลายวิธีที่อาจนำไปใช้ขึ้นอยู่กับพฤติกรรมของ I / O ที่ต้องการ

+        # adds top two items and pushes on stack
+n       # adds top two and prints it, no newline, popping it from stack
+dn      # ditto, except leaves result on stack
??+      # takes two inputs from stdin before adding, leaving sum on stack

ฉันคิดว่ารูปแบบที่สมบูรณ์แบบที่สุดสำหรับผลรวมจะเป็น:

??+p     # takes two inputs, adds, 'peeks'
         #  (prints top value with newline and leaves result on stack)

รอ! สามารถใช้ตัวเลขสองตัวในบรรทัดเดียวกันคั่นด้วยช่องว่าง! สิ่งนี้ทำให้เรา:

?+p

ฉันไม่สามารถดูวิธีการใช้ตัวอย่างแรก+f, dc -e "?+p"ทำงาน ok ที่นี่
Jasen

1
@ Jasen +fเวอร์ชันใช้งานได้หากคุณใส่หมายเลข (สองประการ) ลงในสแต็กแล้ว ฉันไม่รู้จริงๆว่าควรจะdcเป็น I / O std(in|out)หรือไม่ ในการหวนกลับนั่นเป็นตัวเลือกที่เหมาะสมที่สุดที่จะวางไว้ที่ด้านบนของโพสต์ : /
Joe

กฎบอกว่าสแต็คก็โอเคเท่าที่ฉันจะบอกได้
Jasen

9

ภาษาการเขียนโปรแกรมของเช็คสเปียร์ , 155 152 ไบต์

.
Ajax,.
Ford,.
Act I:.
Scene I:.
[Enter Ajax and Ford]
Ajax:
Listen to thy heart
Ford:
Listen to THY heart!You is sum you and I.Open thy heart
[Exeunt]

Ungolfed:

Summing Two Numbers in Verona.

Romeo, a numerical man.
Juliet, his lover and numerical counterpart.

Act I: In which Italian addition is performed.

Scene I: In which our two young lovers have a short chat.

[Enter Romeo and Juliet]

Romeo:
  Listen to thy heart.

Juliet:
  Listen to THY heart! Thou art the sum of thyself and I. Open thy heart.

[Exeunt]

ฉันใช้คอมไพเลอร์ SPL ของ drsam94เพื่อรวบรวมสิ่งนี้ ทดสอบ:

$ python splc.py sum.spl > sum.c
$ gcc sum.c -o sum.exe
$ echo -e "5\n16" | ./sum
21

8

Brachylogขนาด 2 ไบต์

+.

คาดหวังรายการที่มีตัวเลขสองตัวเป็นอินพุต

หรือถ้าคุณต้องการคำตอบSTDOUT:

+w

7

JavaScript (ES6), 9 ไบต์

a=>b=>a+b

ฉันไม่คิดว่าฟังก์ชั่นที่ซ้อนกันถือว่าเป็นฟังก์ชั่นสองอินพุตในจาวาสคริปต์
ภูมิใจ haskeller


1
อันนี้ใช้ได้ใน C # ด้วย
Grax32

7

PHP, 20 ไบต์

น่าแปลกที่เวลานี้สั้นลง:

<?=array_sum($argv);

ทำงานจากบรรทัดคำสั่งเช่น:

$ php sum.php 1 2

สคริปต์ของคุณก็ยอมรับphp sum.php 1 2 3 4 5 6เช่นกันดังนั้นฉันไม่แน่ใจ 100% ว่ามันโอเคไหม
timmyRS

@timmyRS การส่งควรทำงานกับรูปแบบอินพุตเฉพาะ - จำนวนเต็มสองจำนวน ฉันไม่คิดว่ามันควรจะจัดการกับอินพุตอื่นด้วย
insertusernamehere

เกิดอะไรขึ้นถ้าชื่อไฟล์ต้นฉบับเริ่มต้นด้วยตัวเลข? :)
อเล็กซ์ Howansky

@AlexHowansky Psssssssst - อย่าบอกใครเลย ;) นี่คือการเล่นโวหารเมื่อทำงานจากไฟล์ คุณยังสามารถเรียกใช้งานได้โดยใช้การ-rตั้งค่าสถานะ - จากนั้นไม่ใช่ปัญหาอีกต่อไป
insertusernamehere

7

Cheddar ขนาด 3 ไบต์

(+)

นี่คือฟีเจอร์เด็ด ๆ ของ Cheddar ที่เรียกว่า "ตัวดำเนินการแบบใช้ฟังก์ชัน" เครดิตสำหรับแนวคิดนี้จะไปที่ @ CᴏɴᴏʀO'Bʀɪᴇɴ

นี่คือตัวอย่างเพิ่มเติมของตัวดำเนินการที่ทำหน้าที่:

(+)(1,2) // 3
(/)(6,2) // 3
(-)(5)   // -5


6

Geometry Dash - 15 วัตถุ

ในที่สุดก็เสร็จ.
วัตถุ 15 ชิ้นมีไม่มาก แต่ก็ยังเป็นฝันร้ายที่ต้องทำสิ่งนี้ (โดยเฉพาะอย่างยิ่งเนื่องจากจำนวนลบ)

ป้อนคำอธิบายรูปภาพที่นี่

เนื่องจากฉันจะต้องแทรกภาพที่ 15 ที่นี่เพื่อทำซ้ำฉันแค่อัปโหลดระดับ รหัสระดับคือ 5216804 คำอธิบายจะบอกวิธีเรียกใช้และคุณสามารถคัดลอกได้เนื่องจากสามารถคัดลอกได้

คำอธิบาย:

ทริกเกอร์ด้านซ้ายบน (การนับทันที 2) ตรวจสอบว่าการเพิ่มครั้งแรกเป็น 0 ถ้าเป็นแล้วการตรวจสอบถ้าการเพิ่มครั้งที่สองเป็นบวกหรือลบ ถ้ามันเป็นบวกมันจะโอนค่าจากส่วนที่สองไปเป็นผลรวม (BF-style, ใช้ลูป) และถ้ามันเป็นลบมันจะทำแบบเดียวกัน

เหตุผลที่เราต้องตรวจสอบว่าส่วนที่สองเป็นบวกหรือลบคือว่าเราจะต้องลบหนึ่งจากส่วนที่สองและเพิ่มหนึ่งในผลรวมหรือเพิ่มหนึ่งในส่วนที่สองและลบหนึ่งจากผลรวมตามลำดับ

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

เนื่องจาก Geometry Dash นั้นคล้ายกับ BF อย่างมากคุณสามารถสร้างโซลูชัน BF จากสิ่งนี้ได้


5

MATL, 1 ไบต์

s

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

ลองออนไลน์


5

Perl 5.10, 8 ไบต์

ตัวเลขสองหมายเลขที่จะเพิ่มต้องอยู่ใน 2 บรรทัดแยกกันเพื่อให้ตัวเลขนี้ทำงาน:

say<>+<>

ลองอันนี้ที่นี่

หนึ่งที่มีอินพุตในบรรทัดเดียวกัน ( 14 + 1 ไบต์สำหรับแฟล็ก -a )

say$F[0]+$F[1]

ลองที่นี่!

หนึ่งที่มีอินพุตในบรรทัดเดียวกัน ( 19 + 1 ไบต์สำหรับแฟล็ก -a )

map{$s+=$_}@F;say$s

ลองอันนี้ที่นี่

อีกอันหนึ่งโดยเปลี่ยนตัวคั่นค่าเริ่มต้นของอาร์เรย์ ( 19 + 1 ไบต์สำหรับแฟล็ก -aด้วย)

$"="+";say eval"@F"

ลองอันนี้ที่นี่!


2
เดี๋ยวก่อนอีกตัวอย่างที่ดี (หากนี่จะเป็นความท้าทายของแคตตาล็อก) เป็นวิธีการที่ Dennis ระบุไว้ในโพสต์นี้: codegolf.stackexchange.com/q/32884 (ab) โดยใช้-pแฟล็
Dom Hastings

แทนที่จะsay$F[0]+$F[1], say pop()+popผลงาน (การทดสอบในสตรอเบอร์รี่กับ 5.20.2 -E) และช่วยให้คุณประหยัดไบต์
msh210

5

Fuzzy Octo Guacamole , 1 ไบต์

a

ฟังก์ชั่นที่รับอินพุตจากด้านบนของสแต็คและเอาท์พุทโดยการกดไปที่สแต็ก

ตัวอย่างการรันใน REPL:

>>> 8 9 :
[8,9]
>>> a :
17


5

PowerShell v2 +, 17 ไบต์

$args-join'+'|iex

$argsจะเข้าเป็นสองอาร์กิวเมนต์บรรทัดคำสั่งที่แยกต่างหากซึ่งได้รับการไว้ล่วงหน้าลงในอาร์เรย์พิเศษ เราสร้างสตริงกับ-joinโอเปอเรเตอร์โดยเชื่อมต่อมันเข้าด้วยกันกับ a +ตรงกลางจากนั้นก็ไพพ์สตริงนั้นไปที่Invoke-Expression(คล้ายกับeval)


ขอบคุณ @DarthTwon ที่เตือนฉันว่าเมื่อต้องรับมือกับโปรแกรมขั้นต่ำสุดมีหลายวิธีในการป้อนข้อมูลทั้งหมดด้วยจำนวนไบต์เดียวกัน

$args[0]+$args[1]
param($a,$b)$a+$b

PowerShell คืออะไรถ้าไม่ยืดหยุ่น


1
ใช่ฉันแค่สะกดรอยตามคุณที่นี่: P คำตอบอื่น: $args[0]+$args[1]และparam($a,$b)$a+$b
ThePoShWolf

5

> <> , 7 6 3 ไบต์

+n;

ล่ามออนไลน์

หรือลองใช้กับ TIO ด้วยแฟล็ก -v

ลองออนไลน์


เนื่องจากคำถามช่วยให้คุณกำหนดฟังก์ชั่นได้ฉันเชื่อว่าวิเรียบง่าย+น่าจะเพียงพอ: มันจะแสดงตัวเลขสองตัวจากสแต็กและใส่ผลลัพธ์ของการบวกกลับเข้าไปในสแต็ก -vนอกจากนี้ยังสามารถหลีกเลี่ยงค่าใช้จ่ายของการนับตั้งแต่การอ่านตัวเลขสามารถทำได้ก่อนการเรียกใช้ฟังก์ชัน
แอรอน

1
@Aaron: จริง แต่เนื่องจากมีการโพสต์โซลูชันสำหรับภาษาอื่น ๆ แล้วหลายภาษาฉันจะเก็บโปรแกรมนี้ไว้เป็นโปรแกรมแบบเต็ม
Emigna

1
ฉันคิดว่าค่าสถานะ v จะสูงสุด +1 ไบต์ แต่วิธีใดก็ตามที่คุณสามารถใช้ล่ามfishlanguage.comและผลรวมของคุณจะเป็น 3 ไบต์ (ไม่จำเป็นต้องมี -v)
redstarcoder

@redstarcoder: ทุกคนระบุการตั้งค่าสถานะเป็น 3 ไบต์สำหรับปลา (และ 1 ไบต์สำหรับภาษาอื่น ๆ ทั้งหมดที่ดูเหมือน) ไม่แน่ใจว่าทำไมมันแตกต่าง แต่ฉันคิดว่ามันเป็นเหตุผลที่ถูกต้อง
Emigna

ไม่ว่าคุณจะไม่ต้องการธงหากคุณใช้ล่าม fishlanguage.com คุณมีลิงค์ไปยังเมตาหรือไม่? ฉันไม่ได้เห็นโปรแกรมใด ๆ เพิ่ม <ไบต์> สำหรับการใช้จำนวนเต็มในกองเริ่มต้น (ฉันได้ทำมันเกินไป)
redstarcoder

5

C, 35 ไบต์

s(x,y){return y?s(x^y,(x&y)<<1):x;}

สิ่งที่ฉันทำที่นี่มีการกำหนดเพิ่มเติมโดยไม่ต้องใช้ตัวดำเนินการบูลีนหรือเลขคณิต การทำซ้ำนี้ทำให้ x ผลรวมบิตโดย 'xor' และ y บิตนำพาด้วย 'และ' จนกว่าจะไม่มีการดำเนินการ นี่คือรุ่นที่ไม่ได้แต่งแต้ม:

int sum(int x,int y){
    if(y==0){
        //anything plus 0 is itself
        return x;
    }
    //if it makes you happier imagine there's an else here
    int sumBits=x^y;
    int carryBits=(x&y)<<1;
    return sum(sumBits,carryBits);
}

ทำไมคุณไม่เพิ่มเพียงโดยตรง
ผลไม้แยกแยะเมื่อ

ฉันพบว่าเป็นเรื่องน่าเบื่อเวอร์ชันที่ตีกอล์ฟแบบสมบูรณ์นั้นเป็นเรื่องเล็กน้อย
Bijan

"คำตอบทั้งหมดควรแสดงความพยายามเพื่อให้ได้คะแนนที่ดีขึ้นตัวอย่างเช่นคำตอบของการแข่งขันกอล์ฟรหัสควรพยายามให้สั้นที่สุดเท่าที่จะทำได้ (ภายในข้อ จำกัด ของภาษาที่เลือก)" (จากcodegolf.meta.stackexchange.com/a/7073/61384 )
แยกผลไม้

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

1
มันส่อให้เห็นว่ามันมีการแข่งขันในภาษาที่คุณเลือก อย่างไรก็ตามเมื่ออ่านเมตาดาต้าแล้วดูเหมือนว่าฉันไม่สามารถอ้างว่าคำตอบของคุณไม่ถูกต้อง ("คำตอบอาจใช้อัลกอริทึมใด ๆ แม้ว่าจะมีนักเล่นกอล์ฟอยู่") ดังนั้นฉันเดาว่าฉันจะทิ้งมัน
ผลไม้แยกแยะ

4

MATLAB, 4 ไบต์

ลบ 1 ไบต์ด้วย @LeakyNun

@sum

นี่เป็นฟังก์ชั่นนิรนามที่รับอาเรย์และให้ผลรวม ตัวอย่างการใช้:

>> f = @sum
f = 
    @sum
>> f([3 4])
ans =
     7

เกี่ยวกับsumอะไร
Leun Nun

@LeakyNun ขอบคุณความคิดที่ดี!
Luis Mendo

43 ไบต์? xD BTW: ฉันคิดว่าเราต้องมีโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบดังนั้นฉันจะบอกว่า@sumเป็นคำตอบที่ถูกต้องเท่านั้น หรือจะมีฉันทามติเมตาอีกหรือไม่
ข้อผิดพลาด

@ flawr ฉันคิดว่ามีใช่ แต่ฉันหามันไม่พบ
Luis Mendo

4
Wooah ฉันช่วยคุณลด 43D เป็น 4 ไบต์ XD
ข้อผิดพลาด

4

GoLScript , 1 ไบต์ (ไม่มีการแข่งขัน)

K

เพิ่มหมายเลข 2 อันดับแรกในสแต็ก แค่นั้นแหละ.

ตอนนี้วิธีที่จะผลักดันให้พวกเขาในการไปยังกองที่ฉันมีเงื่อนงำ ฉันไม่คิดว่ามันจะเป็นไปได้ .. ไอ @ CᴏɴᴏʀO'Bʀɪᴇɴ


Explanation soon to be coming.- Riker 3 ก.ค. '16
MD XF

+1 สำหรับภาษา Game of Life
HighlyRadioactive

4

ภาษาการเขียนโปรแกรมของเช็คสเปียร์ (SPL), 137 135 ไบต์

โปรแกรมที่สมบูรณ์ golfed:

.
A.
B.
Act I
Scene I
[Enter A and B]
A: Listen to your heart!
B: Listen to your heart! You are the sum of me and you. Open your heart! 

และคำอธิบายสั้น ๆ :

----
.                                 <- Title, everything before the first 
                                     full stop is considered as the tittle and treated as a comment
----
A.                                <- Dramatis personae. Here are introduced the characters in the play.
                                     |Characters are treated as variables.   
B.                                <--
----
Act I                             <- Acts and scenes are used to divide a program into smaller
                                     chunks in order to be able to refer to them later.
                                     |
Scene I                           <--
----
[Enter A and B]                   <- Characters on stage in the current scene, which are the              
                                     variables the program will have access to.
----
A: Listen to your heart!          <- Line of code. All of them have the same structure
                                     Variable: code. In this case, the concrete sentence
                                    "Listen to your heart!" reads an input number and stores it
                                     on the character (variable) refered to.
B: Listen to your heart!          <- Same as above 
   You are the sum of me and you. <- Sum the values of itself and the caharacter (variable)
                                     refered to.
   Open your heart!               <- Output the value of the character (value) refered to.

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

แก้ไข 1: ลบ:after Act IและScene Iตามที่ดูเหมือนว่าทุกอย่างหลังจากตัวเลขโรมันจะถูกละเว้นดังนั้นการบันทึก 2 ไบต์


5
สิ่งนี้ไม่ถูกต้อง ตัวละครจะต้องมาจากบทละครของเช็คสเปียร์และ: ต้องอยู่ที่นั่น นอกจากนี้คุณต้องใช้เครื่องหมายจุลภาคหลังชื่อของอักขระแต่ละตัวสำหรับคำอธิบาย
Oliver Ni

4

x86_32 รหัสเครื่อง 2 ไบต์

08048540 <add7>:
 8048540:   01 c8                   add    %ecx,%eax

สมมติว่าค่าทั้งสองอยู่ใน ecx และ eax register แล้วการดำเนินการตามคำสั่ง add จะเพิ่มค่าของ register สองตัวและเก็บผลลัพธ์ไว้ใน register register

ท่านสามารถเข้าดูโปรแกรมเต็มรูปแบบในภาษา C และ inline ชุมนุมที่นี่ การเขียน wrapper ใน C ทำให้การป้อนข้อมูลและการทดสอบทำได้ง่ายขึ้น แต่ฟังก์ชันการเพิ่มที่เกิดขึ้นจริงสามารถลดลงเหลือสองไบต์


3
นี่ไม่ใช่ฟังก์ชั่นเพียงแค่ตัวอย่าง คุณต้องการretคำแนะนำเช่นกัน (หนึ่งไบต์) และนั่นคือสมมติว่าการประชุมที่กำหนดเองซึ่งeaxถูกใช้เป็นทะเบียนการส่งผ่าน (ไลบรารีการสอนของ Irvine32 asm ทำเช่นนั้น แต่ไม่มีการเรียกประชุมมาตรฐานสำหรับ x86-32 หรือ x86-64 ทำเช่นนั้นแตกต่างจาก ARM ที่รีจิสเตอร์ส่งคืนค่าr0เป็นรีจิสเตอร์การส่งผ่าน ARG ครั้งแรก) ฟังก์ชั่น asm แต่คุณจึงไม่จำเป็นต้องเปลี่ยนเป็น 3 ไบต์lea (%ecx, %edx), %eax+ 1 ไบต์retสำหรับ Microsoft __fastcallหรือ -mregparmGCC
Peter Cordes

1
มันเป็นความท้าทายที่น่าสนใจสำหรับการประชุมแบบเรียกซ้อน popมีเพียง 1 ไบต์ แต่espโหมดการกำหนดแอดเดรสแบบสัมพันธ์ต้องใช้ SIB ไบต์ ดังนั้นการเรียกผู้เรียก - ป๊อปอาจเรียกpop %ecx(ที่อยู่ผู้ส่ง), pop %eax/ pop %edx/ add %edx, %eax(2 ไบต์) / jmp *%ecx(2 ไบต์) = 7 ไบต์ทั้งหมด vs. mov 4(%esp), %eax(4B) / add 8(%esp), %eax(4B) / ret= 9 ไบต์หรือ 11 ไบต์สำหรับรุ่น caller-pops ที่ใช้ret imm16ถ้าฉันทำถูกต้อง มันเพิ่ม 1 ไบต์สำหรับ SIB ที่มี ESP เป็นฐานและอีก 1 ไบต์สำหรับ disp8 ในแต่ละ insn
Peter Cordes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.