Tambahkan dua angka

44

Input: Dua bilangan bulat. Lebih disukai bilangan bulat desimal, tetapi bentuk angka lainnya dapat digunakan. Ini dapat diberikan ke kode dalam input standar, sebagai argumen untuk program atau fungsi, atau sebagai daftar.

Output: Jumlah mereka. Gunakan format yang sama untuk bilangan bulat keluaran sebagai bilangan bulat masukan. Misalnya, input 5 16akan mengarah ke output 21.

Batasan: Tidak ada celah standar. Ini , jawab dengan jumlah byte terendah yang menang.

Catatan: Ini seharusnya cukup sepele, namun saya tertarik untuk melihat bagaimana ini dapat diterapkan. Jawabannya dapat berupa program atau fungsi yang lengkap, tetapi harap identifikasi yang mana.

Kasus uji:

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

Atau sebagai CSV:

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

Papan peringkat

dkudriavtsev
sumber
26
Ini cukup sepele, tetapi tidak terlalu sederhana dari, misalnya, katalog Hello World. Mengingat bahwa kemampuan untuk menambahkan bilangan bulat adalah salah satu dari dua persyaratan kami untuk bahasa pemrograman, saya akan mengatakan itu berharga untuk dimiliki jika ditentukan dengan benar.
Dennis
1
Bisakah jawaban mengambil input dengan nol sebelumnya sebagai default? misalnya 5 16dimasukkan sebagai005 016
FinW
@FinW Tentu. Selama mereka tidak ditafsirkan sebagai oktal.
dkudriavtsev

Jawaban:

38

Jelly , 1 byte

+

Cobalah online!

Juga bekerja di 05AB1E, Sebenarnya, APL, Braingolf, ,,, (Commata), Factor, Forth, Implisit, J, Julia, K, kdb +, Tong, Ly, MATL, Pyke, Deorst, dan Q.

Dennis
sumber
3
Juga berfungsi di Swift.
Zacharý
3
Pyth juga @ Zacharý
Stan Strum
66

Minecraft 1.10, 221 karakter (tidak bersaing)

Lihat, ini yang harus kita hadapi ketika kita membuat peta Minecraft.

Selain: Tidak ada cara untuk mengambil input string di Minecraft, jadi saya sedikit curang dengan membuat Anda memasukkan angka ke dalam program itu sendiri. (Ini agak bisa dibenarkan karena beberapa peta, seperti Minecraft Bingo Lorgon111, mengharuskan Anda untuk menyalin dan menempelkan perintah ke dalam obrolan untuk memasukkan nomor.)

Terima kasih sebelumnya untuk filter Block Labels MCEdit.

Sebuah

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

Non-bersaing karena kesulitan dalam input, dan saya tidak tahu bagaimana cara menghitung byte dalam hal ini (sistem blytes cacat untuk blok perintah).

quat
sumber
4
Sejauh ini yang terbaik. Luar biasa.
dkudriavtsev
Saya tidak berpikir bahwa input hardcoding valid, tetapi saya tidak cukup tahu tentang blok perintah di Minecraft untuk dapat menilai apakah ada cara untuk mengambil input selain hardcoding. Mungkin salah satu pakar Minecraft penduduk kami dapat menimbang.
Mego
3
Ya, tidak ada input teks di MC, selain "tolong salin dan tempel perintah ini". Keypad angka dimungkinkan dengan tanda /, tetapi hampir tidak bisa digunakan semua golf, belum lagi 500kb berkat sintaks yang sangat ketat dari / tellraw. Saya kira alternatifnya adalah menghitung sesuatu di dunia, seperti babi + sapi, atau wol merah + wol biru.
quat
1
@quat Karena kita biasanya menggunakan hopper untuk menghitung hal-hal di minecraft, saya rasa itu akan menjadi cara untuk pergi. Cara lain untuk mengatasi ini akan bisa dilakukan di redstone murni juga dengan menggunakan tuas. Karena kami tidak memiliki batasan apa pun, dan bit tersebut adalah nilai alami terbesar yang dapat dicapai dalam minecraft, yang akan menghasilkan hanya menambahkan dua bit dengan output dua bit (kemungkinan:. 0,1,2Solusi lain adalah dengan mengambil dalam 2 byte dan output pada 9 kawat, tapi akan jauh lebih sedikit Golfy.
Katenkyo
39

Kalkulus biner biner , 4,125 byte

Input dan output sebagai angka Gereja .

00000000 01011111 01100101 11101101 0

Dalam kalkulus lambda , itu adalah λ m . λ n . λ f . λ x . m f ( n f x ).

Indeks De Bruijn : λ λ λ λ 4 2 (3 2 1)


Kalkulus Lambda adalah cara ringkas untuk menggambarkan pemetaan (fungsi).

Misalnya, tugas ini dapat ditulis sebagai λ x . λ y . x + y

Yang perlu diperhatikan adalah, bahwa ini bukan lambda (fungsi) yang membutuhkan dua argumen. Ini sebenarnya lambda bersarang. Namun, ia berperilaku seperti lambda yang membutuhkan dua argumen, sehingga dapat digambarkan secara informal. Setiap lambda secara formal hanya membutuhkan satu argumen.

Misalnya, jika kita menerapkan lambda ini ke 3 dan 4:

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

Jadi, lambda pertama sebenarnya mengembalikan lambda lain.


Angka Gereja adalah cara menghilangkan tanda-tanda tambahan, hanya menyisakan simbol dan variabel lambda.

Setiap angka dalam sistem Gereja sebenarnya adalah lambda yang menentukan berapa kali fungsi diterapkan pada suatu item.

Biarkan fungsi menjadi f dan item menjadi x .

Jadi, angka 1 akan sesuai dengan λ f . λ x . f x , yang berarti menerapkan f ke x tepat sekali.

Angka 3, misalnya, adalah λ f . λ x . f ( f ( f x )), yang berarti menerapkan f ke x tepat tiga kali.


Oleh karena itu, untuk menambahkan dua angka Gereja (katakanlah, m dan n ) bersamaan, itu sama dengan menerapkan f ke x , m + n kali.

Kita dapat mengamati bahwa ini sama dengan pertama kali menerapkan f ke x , n kali, dan kemudian menerapkan f pada item yang dihasilkan m kali.

Misalnya, 2 berarti f(f(x))dan 3 berarti f(f(f(x))), jadi 2 + 3 adalah f(f(f(f(f(x))))).

Untuk menerapkan f ke x , n kali, kita memiliki n f x .

Anda dapat melihat m dan n sebagai fungsi yang mengambil dua argumen, secara informal.

Kemudian, kami menerapkan f lagi ke item yang dihasilkan ini, m kali: m f ( n f x ).

Kemudian, kami tambahkan kembali pelat untuk mendapatkan λ m . λ n . λ f . λ x . m f ( n f x ).


Sekarang, kita harus mengubahnya menjadi indeks De Bruijn .

Pertama, kami menghitung "jarak relatif" antara setiap variabel ke deklarasi lambda. Misalnya, m akan memiliki jarak 4, karena dinyatakan 4 lambdas "lalu". Demikian pula, n akan memiliki jarak 3, f akan memiliki jarak 2, dan x akan memiliki jarak 1.

Jadi, kami menuliskannya sebagai bentuk peralihan ini: λ m . λ n . λ f . λ x . 4 2 (3 2 1)

Kemudian, kita menghapus deklarasi variabel, meninggalkan kita dengan: λ λ λ λ 4 2 (3 2 1)


Sekarang, kami mengubahnya menjadi kalkulus lambda biner .

Aturannya adalah:

  • λ menjadi 00.
  • m n (pengelompokan) menjadi 01 m n.
  • angka i menjadi 1 i kali + 0, misalnya 4 menjadi 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

Biarawati Bocor
sumber
18
Saya ingin melihat file sumber 4,125 byte yang Anda lewati ke interpreter / compiler.
Martin Ender
8
@ MartinEnder Katakan itu untuk setiap jawaban di sini .
Leaky Nun
5
Saya ingin melihat solusi 0,875 byte.
Tn. Lister
3
Dengan konsensus meta , kecuali Anda dapat menyimpan program sebagai file dengan jumlah fraksional byte, Anda harus mengumpulkan.
Pavel
24

Gangguan Umum, 15 byte

(+(read)(read))
Byeonggon Lee
sumber
2
Selamat Datang di Programming Puzzles & Code Golf!
Dennis
Saya relatif tidak terbiasa dengan CLisp, tetapi apakah mungkin untuk menghapus spasi? (+(read)(read))
Mego
@Mego Anda benar, itu mungkin. Saya tidak tahu itu karena saya juga orang baru di Common Lisp, terima kasih atas informasinya! Saya mengedit sumbernya
Byeonggon Lee
3
Saya kira kita berdua belajar sesuatu di sini! Selamat datang di PPCG!
Mego
21

Stack Cats , 8 + 4 = 12 byte

]_:]_!<X

Jalankan dengan -mnbendera. Cobalah online!

Bermain golf di Stack Cats sangat berlawanan dengan intuisi, jadi program ini ditemukan dengan beberapa hari pemaksaan kasar. Sebagai perbandingan, solusi yang lebih intuitif, yang ditulis manusia menggunakan *(...)>templat lebih panjang dua byte

*(>-_:[:)>

dengan -lnbendera sebagai gantinya (lihat bagian bawah posting ini untuk penjelasan).

Penjelasan

Berikut adalah primer pada Stack Cats:

  • Stack Cats adalah bahasa esoterik yang dapat dibalik di mana cermin dari snippet membatalkan efek dari snippet asli. Program-program juga harus merupakan cerminan dari dirinya sendiri - tentu saja, ini berarti bahwa program-program yang panjangnya pun adalah no-ops atau loop tak terbatas, dan semua program terminasi non-sepele adalah panjang ganjil (dan pada dasarnya merupakan konjugasi dari operator pusat).
  • Karena setengah dari program selalu tersirat, setengahnya dapat ditinggalkan dengan bendera -matau -l. Di sini -mbendera digunakan, sehingga setengah program di atas benar-benar mengembang ]_:]_!<X>!_[:_[.
  • Seperti namanya, Stack Cats adalah berbasis-tumpukan, dengan tumpukan tidak berdasar dengan nol (yaitu operasi pada tumpukan yang kosong menghasilkan 0). Stack Cats sebenarnya menggunakan pita tumpukan, misalnya <dan >masing-masing memindahkan satu tumpukan ke kiri dan satu tumpukan ke kanan.
  • Nol di bagian bawah tumpukan ditelan / dihapus.
  • Semua input didorong ke tumpukan input awal, dengan input pertama di bagian atas dan -1 di bawah input terakhir. Keluaran dilakukan di akhir, menggunakan isi tumpukan saat ini (dengan -1 opsional di bagian bawah diabaikan). -nmenunjukkan angka I / O.

Dan inilah jejak program penuh diperluas, ]_:]_!<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+bkemudian dikeluarkan, dengan basis -1 diabaikan. Perhatikan bahwa bagian tersulit tentang solusi ini adalah bahwa tumpukan output harus memiliki -1di bagian bawah, jika tidak tumpukan output hanya [-1]akan mengabaikan basis -1, dan tumpukan output [0]akan menyebabkan basis nol ditelan (tetapi output tumpukan [2], misalnya, akan menampilkan 2baik-baik saja).


Hanya untuk bersenang-senang, inilah daftar lengkap solusi terkait dengan panjang yang sama yang ditemukan (daftar mungkin tidak lengkap):

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

The *(>-_:[:)>solusi lebih panjang, tetapi lebih intuitif untuk menulis karena menggunakan *(...)>template yang. Templat ini diperluas ke <(...)*(...)>saat digunakan dengan -lbendera, yang berarti:

<       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

Dengan demikian, *(...)>template berarti bahwa loop pertama dilewati tetapi yang kedua dieksekusi. Ini memungkinkan pemrograman yang lebih mudah terjadi, karena kita tidak perlu khawatir tentang efek loop di bagian lain dari program.

Dalam hal ini, bagian dalam loop adalah:

>       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

Final >pada template kemudian memindahkan kita kembali ke tumpukan input, di mana a+bdikeluarkan.

Sp3000
sumber
19

Brain-flak , 6 byte

({}{})

Cobalah online!

Brain-flak adalah bahasa yang sangat menarik dengan dua batasan utama.

  1. Satu-satunya karakter yang valid adalah tanda kurung, yaitu salah satu dari karakter ini:

    (){}[]<>
    
  2. Setiap set kurung harus sepenuhnya cocok, jika tidak, program tidak valid.

Satu set kurung dengan tidak ada di antara mereka disebut "nilad". Nilad menciptakan nilai numerik tertentu, dan semua nilad ini bersebelahan ditambahkan. Satu set kurung dengan sesuatu di antara mereka disebut "monad". Monad adalah fungsi yang mengambil argumen numerik. Jadi tanda kurung di dalam monad dievaluasi, dan itulah argumen untuk monad. Ini adalah contoh yang lebih konkret.

The () nilad sama dengan 1. Jadi kode otak-antipeluru berikut:

()()()

Dievaluasi menjadi 3. () Monad mendorong nilai di dalamnya pada tumpukan global. Jadi berikut ini

(()()())

mendorong a 3. {}Nilad mengeluarkan nilai di atas tumpukan. Karena nilad berturut-turut selalu ditambahkan, serangkaian {}jumlah semua elemen teratas di stack. Jadi kode saya pada dasarnya:

push(pop() + pop())
DJMcMayhem
sumber
15

Minecraft 1.10.x, 924 512 byte

Terima kasih kepada @ quat untuk mengurangi blytecount sebesar 48 poin dan bytecount sebesar 412.

Baiklah, jadi, saya mengambil beberapa ide dari jawaban ini dan membuat versi saya sendiri, kecuali bahwa ini mampu menerima input non-negatif. Versi dapat ditemukan di sini dalam format blok struktur.

kelompok

(versi baru terlihat agak membosankan tbh)

Perintah serupa dengan jawaban lainnya:

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

Untuk memasukkan angka, buat sejumlah sapi dan babi. Sapi akan mewakili nilai "n" dan babi akan mewakili nilai "m". Sistem blok perintah akan secara progresif membunuh sapi dan babi dan menetapkan nilai yang diperlukan.

Jawaban ini mengasumsikan bahwa Anda berada di dunia tanpa sapi atau babi yang muncul secara alami dan bahwa nilai yang disimpan dalam "n" dan "m" dihapus pada setiap proses.

Addison Crump
sumber
Untuk bilangan bulat negatif, Anda bisa menggunakan 2 jenis hewan lain sebagai "neganimal" - 5 kuda bisa mewakili -5, misalnya.
Mego
@Mego Maka itu akan menjadi empat input, bukan 2.
Addison Crump
Masih akan menjadi dua input - ini setara dengan menggunakan komplemen dua untuk angka negatif. Formatnya sedikit berbeda, tapi tetap satu input. Setidaknya, itulah dua sen saya.
Mego
Mungkin bisa menghemat blok dengan menggunakan execute @e[type=Pig] ~ ~ ~ scoreboard players add m a 1, jadi Anda tidak memerlukan bentuk jam apa pun.
quat
@quat Ooh. Bagus.
Addison Crump
14

Retina , 42 byte

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

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

Cobalah online!

Penjelasan

Menambahkan angka di unary adalah hal termudah di dunia, tetapi begitu Anda memperkenalkan angka negatif, semuanya menjadi kacau ...

\d+
$*

Kami mulai dengan mengonversi angka menjadi unary. Ini dilakukan dengan mencocokkan setiap angka dengan \d+dan menggantinya $*. Ini adalah fitur substitusi khusus-Retina. Sintaks lengkapnya adalah count$*characterdan menyisipkan countsalinan character. Keduanya dapat dihilangkan di mana countdefault untuk $&(yaitu pertandingan itu sendiri) dan characterdefault ke 1. Jadi untuk setiap input nkita mendapatkan nsatu, dan kita masih memiliki tanda minus potensial di sana, serta pemisah ruang. Misalnya input 8 -5memberi:

11111111 -11111

Sekarang untuk menangani angka negatif, paling mudah menggunakan -1digit terpisah . Kami akan gunakan -untuk tujuan itu.

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

Tahap ini melakukan dua hal. Itu menghilangkan ruang, tanda minus terkemuka, dan mengubah tanda 1setelah minus menjadi -diri mereka sendiri. Ini dilakukan dengan cara mencocokkan |-1+(yaitu spasi atau angka negatif) dan melakukan transliterasi padanya. Transliterasi berubah dari 1pmenjadi -_, tetapi di sini, pmeluas ke semua karakter ASCII yang dapat dicetak dan _berarti menghapus. Jadi 1dalam pertandingan itu bisa berubah menjadi -dan minus dan spasi dihapus. Contoh kita sekarang terlihat seperti ini:

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

Tahap ini menangani kasus di mana ada satu angka positif dan satu negatif dalam input. Jika demikian, akan ada 1s dan -s dalam string dan kami ingin mereka membatalkan. Ini dilakukan dengan mencocokkan dua karakter dengan batas kata di antara mereka (karena 1s dianggap sebagai karakter kata dan -bukan), dan mengganti kecocokan dengan apa-apa. The +menginstruksikan Retina untuk melakukan hal ini berulang-ulang sampai string berhenti berubah.

Sekarang kita hanya memiliki 1 s atau hanya - s.

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

Untuk mengonversi ini kembali menjadi desimal, kami mencocokkan seluruh input, tetapi jika memungkinkan kami menangkap a -menjadi grup 1. Kami menulis kembali grup 1(untuk menambahkan a -ke angka negatif) dan kemudian kami menulis kembali panjang pertandingan dengan $.&(juga fitur substitusi khusus-Retina).

Martin Ender
sumber
2
Ini sangat pintar.
Mego
Sekarang seandainya ada cara mudah untuk menerapkannya rangedi Retina. Saya sudah mencoba beberapa kali, tetapi negatifnya menyakitkan.
mbomb007
Diperlukan lebih dari 40 byte untuk menambahkan dua angka dalam bahasa ini ??
dkudriavtsev
2
@DmitryKudriavtsev baik, Retina tidak memiliki konsep angka ...
Martin Ender
@DmitryKudriavtsev, dan itu hanya bilangan bulat ....
msh210
14

Domino , 38.000 byte atau 37 ubin

Ini dibuat di Simulator Meja . Ini video dan ini file . Ini adalah setengah penambah standar, terdiri dari andgerbang untuk nilai 2^1tempat dan xorgerbang untuk nilai 2^0tempat.

masukkan deskripsi gambar di sini

Detail

  • I / O
    • Mulai - Ini termasuk untuk kejelasan (tidak dihitung terhadap total) dan merupakan apa yang 'dipanggil' atau 'dieksekusi' fungsi. Harus 'ditekan' setelah input diberikan [Kuning] .
    • Input A - Ini termasuk untuk kejelasan (tidak dihitung terhadap total) dan 'ditekan' untuk menunjukkan a 1dan tidak ditekan untuk 0 [Hijau] .
    • Input B - Ini termasuk untuk kejelasan (tidak dihitung terhadap total) dan 'ditekan' untuk menunjukkan a 1dan tidak ditekan untuk 0 [Biru] .
    • Output - Ini dihitung terhadap total. Domino ini menyatakan jumlahnya. Kiri adalah 2^1dan kanan 2^0 [Hitam] .
  • Mendesak
    • Untuk memberi masukan atau memulai rantai, buatlah kelereng logam
    • Atur kekuatan angkat ke 100%
    • Angkat marmer di atas domino yang diinginkan
    • Jatuhkan marmer
Buah Nonlinier
sumber
1
... bagaimana?
dkudriavtsev
4
@Mendeleev Setelah Anda memiliki semua gerbang logika biner , semuanya masuk ke tempatnya xD.
NonlinearFruit
10

Haskell, 3 byte

(+)

Tanda kurung ada di sini karena harus merupakan fungsi awalan. Ini sama dengan mengambil bagian dari fungsi +, tetapi tidak ada argumen yang diterapkan. Ini juga bekerja pada berbagai jenis, seperti Vektor yang diimplementasikan dengan benar, Matricies, bilangan Kompleks, Mengapung, Ganda, Rasional, dan tentu saja Integer.

Karena ini Haskell, inilah cara melakukannya pada level-level. Ini akan dilakukan pada waktu kompilasi alih-alih waktu berjalan:

-- 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)

Kode diadaptasi dari Haskell Wiki

Lazersmoke
sumber
3
fakta menyenangkan: ini adalah polyglot dengan Cheddar: D
Downgoat
10

Mathematica, 4 2 byte

Tr

Mencoret 4 masih teratur 4 ... Tr diterapkan ke daftar satu dimensi mengambil jumlah elemen daftar tersebut.

LegionMammal978
sumber
9

dc, 2 byte

+f

Menambahkan dua item teratas pada stack (sebelumnya diambil dari stdin), lalu membuang konten stack ke stdout.

EDIT: Setelah dipertimbangkan lebih lanjut, tampaknya ada beberapa cara ini dapat diterapkan, tergantung pada perilaku I / O yang diinginkan.

+        # 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

Saya kira bentuk paling lengkap untuk penjumlahannya adalah sebagai berikut:

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

Tunggu! Dua angka dapat diambil pada baris yang sama, dipisahkan oleh spasi! Ini memberi kita:

?+p
Joe
sumber
Saya tidak bisa melihat bagaimana menggunakan contoh pertama +f, dc -e "?+p"berfungsi ok di sini.
Jasen
1
@ Yasen +fVersi ini berfungsi jika Anda telah memasukkan (tepat dua) angka pada tumpukan. Saya tidak benar-benar tahu apakah dcI / O seharusnya std(in|out)atau stack. Dalam retrospeksi, itu adalah pilihan yang paling tidak masuk akal untuk ditempatkan di bagian atas pos. : /
Joe
aturan mengatakan stack adalah OK sejauh yang saya tahu,
Jasen
9

Bahasa Pemrograman Shakespeare , 155 152 byte

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

Tidak Disatukan:

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]

Saya menggunakan kompiler SPL drsam94 untuk mengkompilasi ini. Untuk menguji:

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

Brachylog , 2 byte

+.

Mengharapkan daftar dengan dua angka sebagai input

Atau, jika Anda ingin jawabannya STDOUT:

+w
Fatalisasi
sumber
7

JavaScript (ES6), 9 byte

a=>b=>a+b
Patrick Roberts
sumber
Saya tidak berpikir fungsi bersarang dianggap sebagai fungsi dua-input dalam javascript
bangga haskeller
4
@proudhaskeller ya, benar
Patrick Roberts
1
Yang ini bekerja di C # juga.
Grax32
7

PHP, 20 byte

Mengejutkan kali ini:

<?=array_sum($argv);

Berjalan dari baris perintah, seperti:

$ php sum.php 1 2
masukkan nama pengguna di sini
sumber
Skrip Anda juga menerima, php sum.php 1 2 3 4 5 6jadi saya tidak 100% yakin apakah itu ok.
timmyRS
@timmyRS Pengajuan harus berfungsi untuk format input spesifik - dua bilangan bulat. Saya tidak berpikir harus menangani input lain juga.
masukkan nama pengguna di sini
Bagaimana jika nama file sumber dimulai dengan angka? :)
Alex Howansky
@AlexHowansky Psssssssst - jangan beri tahu siapa pun. ;) Ini adalah kekhasan, saat menjalankan dari file. Anda masih bisa menjalankannya menggunakan -rflag - maka itu tidak masalah lagi.
masukkan nama pengguna di sini
7

Cheddar, 3 byte

(+)

Ini adalah fitur keren dari Cheddar yang disebut "operator yang difungsikan". Penghargaan untuk ide ini diberikan ke @ CᴏɴᴏʀO'Bʀɪᴇɴ.

Berikut adalah lebih banyak contoh operator yang difungsikan:

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

Python, 11 3 byte

sum

int.__add__

Operator khusus yang sederhana.

Biarawati Bocor
sumber
6

Dash Geometri - 15 objek

Akhirnya selesai.
15 objek tidak banyak, tetapi masih merupakan mimpi buruk untuk melakukan ini (terutama karena angka negatif).

masukkan deskripsi gambar di sini

Karena saya harus memasukkan 15 gambar di sini untuk bagaimana mereproduksi ini, saya hanya mengunggah level. Level ID adalah 5216804. Deskripsi memberi tahu Anda cara menjalankannya dan Anda dapat menyalinnya karena dapat disalin.

Penjelasan:

Pemicu kiri atas (Hitungan Instan 2) memeriksa apakah addend pertama adalah 0. Jika ya, maka dicek apakah addend kedua positif atau negatif. Jika positif, itu mentransfer nilai dari penambahan kedua ke jumlah (gaya BF, menggunakan loop) dan jika negatif, itu akan melakukan hal yang sama.

Alasan mengapa kita perlu memeriksa apakah penambahan kedua positif atau negatif adalah bahwa kita perlu mengurangi satu dari penambahan kedua dan menambahkan satu ke jumlah atau menambahkan satu ke penambahan kedua dan mengurangi satu dari jumlah masing-masing.

Jika tambahan pertama bukan nol, ia menguji apakah positif atau negatif menggunakan proses di atas. Setelah satu iterasi dalam loop sementara, tes untuk melihat apakah addend pertama adalah nol dan jika ya, itu melakukan proses yang dijelaskan pada awal penjelasan.

Karena Geometry Dash sangat mirip dengan BF, Anda bisa membuat solusi BF dari ini.

MilkyWay90
sumber
5

MATL, 1 byte

s

Menerima array dua bilangan bulat sebagai input dan menjumlahkannya. Sementara program sederhana +juga berfungsi, itu sudah ditunjukkan untuk bahasa lain.

Cobalah secara Online

Suever
sumber
5

Perl 5.10, 8 byte

Dua angka yang ditambahkan harus berada pada 2 baris terpisah agar bisa berfungsi:

say<>+<>

Coba yang ini di sini.

Satu dengan input pada baris yang sama ( 14 +1 byte untuk flag- a )

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

Coba di sini!

Satu dengan input pada baris yang sama ( 19 +1 byte untuk flag- a )

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

Coba yang ini di sini.

Satu lagi, dengan mengubah pemisah default array ( 19 + 1 byte untuk -sebuah flag juga)

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

Coba yang ini di sini!

Paul Picard
sumber
2
Hei, contoh bagus lainnya (jika ini akan menjadi tantangan katalog) adalah metode yang diuraikan oleh Dennis dalam posting ini: codegolf.stackexchange.com/q/32884 (ab) menggunakan -pbendera.
Dom Hastings
Alih-alih say$F[0]+$F[1], say pop()+popbekerja (diuji dalam Strawberry 5.20.2 dengan -E) dan menghemat satu byte.
msh210
5

Fuzzy Octo Guacamole , 1 byte

a

Fungsi yang mengambil input dari atas tumpukan dan mengeluarkan output dengan mendorong ke tumpukan.

Contoh berjalan di REPL:

>>> 8 9 :
[8,9]
>>> a :
17
Rɪᴋᴇʀ
sumber
5

PowerShell v2 +, 17 byte

$args-join'+'|iex

Mengambil input sebagai dua argumen baris perintah yang terpisah, yang dipra-diisi ke dalam array khusus $args. Kami membentuk string dengan -joinoperator dengan menggabungkannya bersama-sama dengan +di tengah, kemudian menyalurkan string ke Invoke-Expression(mirip dengan eval).


Terima kasih kepada @DarthTwon untuk mengingatkan saya bahwa ketika berhadapan dengan program seminimal itu, ada beberapa metode untuk mengambil input semua pada byte-count yang sama.

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

PowerShell tidak ada artinya jika tidak fleksibel.

AdmBorkBork
sumber
1
Ya, saya hanya menguntit Anda di sini: P Alternatif jawaban: $args[0]+$args[1]danparam($a,$b)$a+$b
ThePoShWolf
5

> <> , 7 6 3 byte

+n;

Penerjemah online

Atau coba di TIO dengan flag -v.

Cobalah online

Emigna
sumber
Karena pertanyaannya memungkinkan Anda mendefinisikan suatu fungsi, saya percaya sederhana +akan cukup: itu akan memunculkan dua angka dari tumpukan dan menempatkan hasil penambahan mereka kembali ke tumpukan. Biaya -vjuga dapat dihindari, karena membaca angka-angka bisa dilakukan sebelumnya pemanggilan fungsi.
Aaron
1
@ Harun: Benar. Tetapi karena solusi itu sudah diposting untuk beberapa bahasa lain, saya akan menyimpannya sebagai program lengkap.
Emigna
1
Saya pikir flag v akan menjadi maksimum +1 byte tetapi bagaimanapun Anda bisa menggunakan penerjemah fishlanguage.com dan total Anda akan menjadi 3 byte (tidak perlu -v).
redstarcoder
@redstarcoder: Semua orang selalu menentukan bendera sebagai 3 byte untuk ikan (dan 1 byte untuk semua bahasa lain tampaknya). Tidak yakin mengapa ini berbeda tetapi saya menganggap itu untuk alasan yang sah.
Emigna
Apapun, Anda tidak perlu bendera jika Anda hanya menggunakan juru bahasa fishlanguage.com. Apakah Anda memiliki tautan ke meta? Saya belum melihat ada program <> yang ditambahkan byte untuk menggunakan integer pada stack awal (saya sudah melakukannya juga).
redstarcoder
5

C, 35 byte

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

Apa yang saya lakukan di sini adalah penambahan tanpa menggunakan operator boolean atau aritmatika. Ini secara rekursif membuat x jumlah bit dengan 'xor', dan y carry bit oleh 'dan' sampai tidak ada carry. Ini versi yang tidak dikoleksi:

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
sumber
Mengapa Anda tidak langsung menambahkan saja?
Buah Esolanging
Saya merasa membosankan, versi yang sepenuhnya golf itu sepele.
Bijan
"Semua jawaban harus menunjukkan upaya mencapai skor yang lebih baik. Misalnya, jawaban untuk tantangan kode golf harus berusaha sesingkat mungkin (dalam batasan bahasa yang dipilih)." (dari codegolf.meta.stackexchange.com/a/7073/61384 )
Esolanging Fruit
2
Jelas saya berpikir untuk hanya menambahkan angka, dan saya berusaha membuatnya lebih pendek, hanya di bawah pengekangan alternatif. Saya pikir karena ini adalah pertanyaan yang tidak konvensional, itu layak mendapat jawaban yang tidak konvensional. Mengikuti aturan kata demi kata itu, tidak ada alasan untuk pernah memberikan jawaban jika seseorang telah mengajukan jawaban yang lebih pendek. Jika Anda memasang solusi python 20 byte dan seseorang telah memiliki versi 4 byte, maka Anda membuktikan bahwa Anda tidak tahu cara menyalin dan menempel. Orang-orang memasang solusi 20 byte, karena kami menghargai orisinalitas.
Bijan
1
Tersirat bahwa itu kompetitif dalam bahasa yang Anda pilih. Namun, setelah membaca meta, sepertinya saya tidak dapat mengklaim bahwa jawaban Anda tidak valid ("Jawaban dapat menerapkan algoritma apa pun, bahkan jika ada yang golfier"), jadi saya rasa saya akan membatalkannya.
Buah Esolanging
4

MATLAB, 4 byte

1 byte dihapus berkat @LeakyNun

@sum

Ini adalah fungsi anonim yang mengambil array dan memberikan jumlahnya. Contoh penggunaan:

>> f = @sum
f = 
    @sum
>> f([3 4])
ans =
     7
Luis Mendo
sumber
Bagaimana dengan sum?
Leaky Nun
@ LeakyNun Terima kasih, ide bagus!
Luis Mendo
43 byte? xD BTW: Saya pikir kita harus memiliki program penuh atau fungsi , jadi saya katakan hanya @sumjawaban yang valid. Atau adakah konsensus meta lain?
flawr
@ flawr Saya pikir ada, ya. Tetapi saya tidak dapat menemukannya
Luis Mendo
4
Wooah, saya membantu Anda mengurangi dari 43 menjadi 4 byte XD
flawr
4

GoLScript , 1 byte (tidak bersaing)

K

Menambahkan 2 angka teratas di tumpukan. Itu dia.

Sekarang bagaimana mendorong mereka pada ke stack, saya tidak tahu. Saya tidak berpikir itu mungkin .. batuk @ CᴏɴᴏʀO'Bʀɪᴇɴ batuk

Rɪᴋᴇʀ
sumber
Explanation soon to be coming.- Riker 3 Jul '16
MD XF
+1 untuk bahasa Game of Life.
HighlyRadioactive
4

Bahasa Pemrograman Shakespeare (SPL), 137 135 byte

Program lengkap, golf:

.
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! 

Dan penjelasan singkat:

----
.                                 <- 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.

Saya tidak yakin ini adalah yang terpendek. Periksa halaman resmi untuk info lebih lanjut.

Sunting 1: Dihapus :setelah Act Idan Scene Ikarena tampaknya segala sesuatu setelah angka romawi diabaikan, sehingga menghemat 2 byte.

Ioannes
sumber
5
Ini tidak valid Karakter harus dari drama Shakespeare dan: s harus ada di sana. Selain itu, Anda perlu koma setelah nama setiap karakter untuk deskripsi.
Oliver Ni
4

kode mesin x86_32, 2 byte

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

Dengan asumsi kedua nilai sudah ada di register ecx dan eax, melakukan instruksi add akan menambahkan nilai-nilai dari dua register dan menyimpan hasilnya di register tujuan.

Anda dapat melihat program lengkap yang ditulis dalam C dan inline assembly di sini . Menulis pembungkus dalam C membuatnya lebih mudah untuk memberikan input dan melakukan pengujian, tetapi fungsi add yang sebenarnya dapat dikurangi menjadi dua byte ini.

davey
sumber
3
Ini bukan fungsi, hanya cuplikan. Anda memerlukan retinstruksi juga (satu byte). Dan itu mengasumsikan konvensi pemanggilan kustom di mana eaxdigunakan sebagai register arg-passing. (Pustaka pengajaran Irvine32 asm melakukan hal itu, tetapi tidak ada konvensi panggilan standar untuk x86-32 atau x86-64 yang melakukan itu, tidak seperti pada ARM di mana register nilai-kembali r0juga merupakan register pelintas yang pertama.) asm berfungsi, jadi Anda tidak perlu mengubahnya ke 3 byte lea (%ecx, %edx), %eax+ 1 byte retuntuk Microsoft __fastcallatau gcc -mregparm.
Peter Cordes
1
Ini tantangan yang menarik untuk konvensi pemanggilan stack-args. pophanya 1 byte, tetapi espmode pengalamatan-relatif membutuhkan byte SIB. Jadi konvensi pemanggil pemanggil mungkin pop %ecx(alamat pengirim), pop %eax/ pop %edx/ add %edx, %eax(2 byte) / jmp *%ecx(2 byte) = total 7 byte. vs. mov 4(%esp), %eax(4B) / add 8(%esp), %eax(4B) / ret= 9 byte, atau 11 byte untuk versi penelepon yang menggunakan itu ret imm16, jika saya melakukannya dengan benar. Ini adalah tambahan 1 byte untuk SIB dengan ESP sebagai basis, dan tambahan 1 byte untuk disp8 di setiap insn.
Peter Cordes