İki numara ekle


44

Giriş: İki tamsayı. Tercihen ondalık sayılar, ancak diğer sayı biçimleri kullanılabilir. Bunlar standart girdideki koda, programa veya işleve argüman olarak veya bir liste halinde verilebilir.

Çıktı: Toplamları. Çıkış tamsayıları için giriş tamsayıları ile aynı formatı kullanın. Örneğin, giriş 5 16çıkışa yol açacaktır 21.

Kısıtlamalar: Lütfen standart boşluklar yok. Bu , kazanılan bayt miktarındaki en düşük cevabı verir.

Notlar: Bu oldukça önemsiz olmalı, ancak nasıl uygulanabileceğini görmekle ilgileniyorum. Cevap tam bir program veya işlev olabilir, ancak hangisinin olduğunu belirtin.

Test durumları:

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

Veya CSV olarak:

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

Liderler Sıralaması


26
Bu oldukça önemsizdir, ancak Hello World kataloğundan çok da kolay değildir. Tamsayı ekleme yeteneğinin, programlama dilleri için iki gereksinimden biri olduğu göz önüne alındığında, eğer doğru belirtilmişse, buna değeceğini söylemeliyim.
Dennis,

1
Cevap, varsayılan olarak önceki sıfırlarla girdi alabilir mi? örneğin 5 16, 005 016
FinW

@ FinW Tabii. Sekizlik olarak yorumlanmadıkları sürece.
dkudriavtsev

Yanıtlar:


38

Jöle , 1 bayt

+

Çevrimiçi deneyin!

Ayrıca 05AB1E, Aslında, APL, Braingolf, ,,, (Commata), Faktör, İleri, Örtülü, J, Julia, K, kdb +, Fıçı, Ly, MATL, Pyke, Deorst ve Q'da da çalışır.


3
Ayrıca Swift de çalışıyor.
Zacharý

3
Yanı Zachary @ Pyth
Stan Strum

66

Minecraft 1.10, 221 karakter (yarışmaz)

Bakın, Minecraft haritalarını yaparken başa çıkmamız gereken şey bu.

Bir kenara: Minecraft'ta bir string girişi almanın bir yolu yok, bu yüzden sayıları programın kendisine girerek biraz hile yapıyorum. (Biraz haklı çünkü Lorgon111 Minecraft Bingo gibi bir kaç harita, bir numara girmek için sohbete kopyalayıp yapıştırmanızı gerektiriyor.)

Blok Etiketleri MCEdit filtresi için çok teşekkür ederiz .

bir

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

Girdideki zorluklar nedeniyle rekabet etmiyor ve bu konuda baytları sayma konusunda hiçbir fikrim yok (blytes sistemi komut blokları için kusurlu).


4
Bu en iyisidir. İnanılmaz.
dkudriavtsev

Girdi kodlama kodunun geçerli olduğunu düşünmüyorum, ancak Minecraft’taki komut blokları hakkında, kodlamadan başka bir giriş yapıp yapamayacağına karar verebilecek kadar bilgim yok. Belki de mukim Minecraft uzmanlardan biri tartmak olabilir.
Mego

3
Evet, "lütfen bu komutu kopyalayıp yapıştırın" dışında MC’de sıfır metin girişi var. / Tellraw ile bir sayı tuş takımı mümkündür, ancak / tellraw'ın müstehcen katı sözdizimi sayesinde 500kb'den bahsetmek yerine, tüm golf oyunları için kullanılabilir. Sanırım dünyadaki bir şeyi domuzlar, inekler veya kırmızı yün + mavi yün gibi saymak için bir alternatif olabilir.
dörtlü

1
@quat Minecrafttaki işleri saymak için genellikle hazneyi kullandığımızdan, sanırım gitmesi gereken bir yol olur. Bununla baş etmenin başka bir yolu da saf redstone'da da kollar kullanılarak yapılabilir. Herhangi bir kısıtlamaya sahip olmadığımızdan ve bit, minecraft'ta ulaşılabilecek en büyük doğal değer olduğundan, iki bitlik bir çıktıyla iki bit eklemekle sonuçlanacaktır (olasılık 0,1,2:. Başka bir çözüm 2 bayt alacaktır ve 9 kablolu çıkış, ancak çok daha az golf sahası olurdu
Katenkyo


39

İkili lambda hesabı , 4.125 bayt

Kilise sayıları olarak girdi ve çıktı .

00000000 01011111 01100101 11101101 0

Olarak lambda kalkülüs , bu λ bir m . λ n . λ f . λ x . m f ( n f x ).

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


Lambda hesabı , bir haritayı tanımlamanın kısa bir yoludur (fonksiyon).

Örneğin, bu görev λ x olarak yazılabilir . λ y . x + y

Dikkat edilmesi gereken, bunun iki argüman alan bir lambda (fonksiyon) olmadığıdır. Bu aslında yuvalanmış bir lambdadır. Ancak, iki argüman alan bir lambda gibi davranır, bu nedenle gayrı resmi olarak tanımlanabilir. Her lambda resmen sadece bir argüman alır.

Örneğin, bu lambda'yı 3 ve 4'e uygularsak:

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

Böylece, ilk lambda aslında başka bir lambda döndürür.


Kilise rakamları , sadece lambda sembolleri ve değişkenleri bırakarak, ekstra işaretlerden kurtulmanın bir yoludur.

Kilise sistemindeki her sayı aslında işlevin bir öğeye kaç kez uygulandığını belirten bir lambdadır.

Fonksiyon f ve madde x olsun .

Böylece, 1 sayısı λ f'ye karşılık gelir . λ x . f x araçlar uygulamak, hangi f için x tam olarak bir kere.

Örneğin, 3 sayısı λ f olacaktır . λ x . f ( f ( f x aracı uygulanır)), f için x tam olarak üç kez.


Bu nedenle, iki Kilise rakamını (örneğin, m ve n ) bir araya getirmek, f , x , m + n zamanlarına uygulamakla aynıdır .

Bu ilk uygulamadan aynı olduğunu gözlemleyebilirsiniz f için x , n zamanlarda, sonra uygulayarak f çıkan madde için m süreleri.

Örneğin, 2 anlamına gelir f(f(x))ve 3 anlamına gelir f(f(f(x))), bu yüzden 2 + 3 olur f(f(f(f(f(x))))).

Uygulamak için f için x , n kere, biz n f x .

M ve n'yi gayrı resmi olarak iki argüman alan işlevler olarak görüntüleyebilirsiniz .

Sonra biz uygulamak f bu çıkan öğe, yine m süreleri: m f ( n f x ).

Daha sonra λ m elde etmek için kazan plakasını geri ekleyin . λ n . λ f . λ x . m f ( n f x ).


Şimdi, onu De Bruijn endeksine dönüştürmeliyiz .

Öncelikle, her değişken arasındaki lambda bildirgesindeki "göreceli mesafeyi" sayarız. Örneğin, m'nin "4" mesafeli olduğu söylendiğinden 4 mesafeli olurdu. Benzer şekilde, n , 3'lük bir mesafeye sahip olacaktı , f , 2'lik bir mesafeye sahip olacaktı ve x , 1'lik bir mesafeye sahip olacaktı.

Böylece, bu ara form olarak yazıyoruz: λ m . λ n . λ f . λ x . 4 2 (3 2 1)

Ardından değişken bildirimlerini kaldırarak bizi şu şekilde bırakarak: λ λ λ λ 4 2 (3 2 1)


Şimdi, onu ikili lambda hesabına çeviriyoruz .

Kurallar:

  • λ olur 00.
  • m , n (gruplama) haline gelir 01 m n.
  • numaraları ı olur 1 i kere + 0Örnek 4 olur için, 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
Tercümana / derleyiciye ilettiğiniz 4.125 bayt kaynak dosyasını görmek istiyorum.
Martin Ender

8
@MartinEnder Buradaki her cevaba bunu söyle .
Leaky Nun

5
Lütfen 0.875 baytlık bir çözüm görmek istiyorum.
Bay Lister,

3
Meta oybirliği ile , programı kesirli miktarda bayt olan bir dosya olarak saklayamazsanız, tamamlamanız gerekir.
Pavel

24

Ortak Lisp, 15 bayt

(+(read)(read))

2
Programlama Bulmacaları ve Kod Golf'üne Hoşgeldiniz!
Dennis,

CLisp'i tanımadım ama boşlukları kaldırmak mümkün olur mu? (+(read)(read))
Mego

@Mego Haklısın, bu mümkün. Bunu bilmiyordum çünkü Common Lisp'te de yeniyim, bilgi için teşekkürler! Kaynağı değiştirdim
Byeonggon Lee

3
Sanırım ikimiz de burada bir şeyler öğrendik! PPCG'ye hoş geldiniz!
Mego

21

Yığın Kedileri , 8 + 4 = 12 bayt

]_:]_!<X

-mnBayraklarla koş . Çevrimiçi deneyin!

Stack Cats'de golf oynamak son derece zahmetlidir, bu yüzden yukarıdaki bu program birkaç gün kaba kabadayılıkla bulundu. Karşılaştırma için, *(...)>şablonu kullanan daha sezgisel, insan tarafından yazılmış bir çözüm iki byte daha uzundur

*(>-_:[:)>

ile -lnyerine bayraklar (açıklaması için, bu yazının altına bakın).

açıklama

İşte Yığın Kedileri üzerine bir astar:

  • Stack Cats, bir snippet'in aynasının orijinal snippet'in etkisini geri aldığı, geri dönüşümlü bir ezoterik dildir. Programlar ayrıca kendisinin ayna görüntüleri de olmalıdır - zorunlu olarak, bu, eşit uzunluktaki programların işlemsiz veya sonsuz döngüler olduğu ve önemsiz olmayan tüm sonlandırma programlarının tek uzunlukta olduğu anlamına gelir (ve esas olarak merkezi operatörün bir çekimidir).
  • Programın yarısı her zaman ima edildiğinden, bir yarısı -mveya -lbayrağı ile bırakılabilir . Burada -mbayrak kullanılır, bu yüzden yukarıdaki yarı program gerçekte genişler ]_:]_!<X>!_[:_[.
  • Adından da anlaşılacağı gibi, Stack Cats yığın temellidir, yığınlar sıfır ile dipsizdir (yani, aksi halde boş bir yığında yapılan işlemler 0 döndürür). Yığın Kediler aslında örneğin yığınlar, bir bant kullanır <ve >sağ sırasıyla sol bir yığın ve bir yığın hareket ettirin.
  • İstifin altındaki sıfırlar yutulur / kaldırılır.
  • Tüm girişler ilk giriş üstte ve ekstra girişin son girişin altında olan ilk giriş yığınına itilir. Çıktı, geçerli yığının içeriği kullanılarak yapılır (altta isteğe bağlı bir -1 göz ardı edilerek). -nsayısal G / Ç'yi belirtir.

Ve işte genişletilmiş tam programın bir izi ]_:]_!<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+bdaha sonra, baz -1 göz ardı edilmiş şekilde çıkarılır. Bu çözüme ilişkin en zorlu kısmın, çıkış yığının -1dibinde olması gerektiği , aksi takdirde bunun bir çıkış yığınının sadece [-1]-1 tabanını görmezden geleceği ve bir çıktı yığınının [0], taban sıfırı yutulmasına neden olacağı (ancak bir çıkışın) olacağına dikkat edin. [2]örneğin yığını, 2sadece iyi çıktı olur ).


Sadece eğlence için, burada bulunan aynı uzunluktaki ilgili çözümlerin tam listesi (liste tam olmayabilir):

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

*(>-_:[:)>Çözelti daha uzundur, ancak kullandığından yazmak için daha sezgisel *(...)>şablonu. Bu şablon bayrakla <(...)*(...)>kullanıldığında genişler -l, yani:

<       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

Bu nedenle, *(...)>şablon, ilk döngünün atlandığı, ikincisinin yürütüldüğü anlamına gelir. Bu, programın diğer yarısında döngünün etkileri hakkında endişelenmemize gerek olmadığından, daha basit programlama yapılmasına izin verir.

Bu durumda, döngünün içi:

>       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

>Şablondaki final daha sonra bizi çıktı çıktığı giriş yığınına geri götürür a+b.


19

Beyin-flak , 6 bayt

({}{})

Çevrimiçi deneyin!

Brain-flak, üzerinde iki önemli kısıtlama bulunan çok ilginç bir dildir.

  1. Yalnızca geçerli karakterler parantez, yani bu karakterlerden herhangi biri:

    (){}[]<>
    
  2. Her bir ayraç seti tamamen eşleşmelidir, aksi takdirde program geçersizdir.

Aralarında hiçbir şey olmayan bir küme parantezine "nilad" denir. Bir nilad, belirli bir sayısal değer yaratır ve bu niladların tümü yan yana toplanır. Aralarında bir şey olan bir parantez kümesine "monad" denir. Monad, sayısal bir argüman alan bir fonksiyondur. Böylece bir monad içindeki parantezler değerlendirilir ve bu monadın argümanıdır. İşte daha somut bir örnek.

() Nilad aşağıdaki beyin kurşun geçirmez kod Yani 1. eşittir:

()()()

3 olarak değerlendirilir. () Monad , içindeki değeri global yığında iter. Yani aşağıdaki

(()()())

3 iter. {}Nilad değeri yığının üstüne çıkarır. Ardışık niladlar her zaman eklendiğinden, bir dizi {}, yığındaki üst öğelerin tümünü toplar . Yani benim kodum esasen:

push(pop() + pop())

15

Minecraft 1.10.x, 924 512 bayt

Blytecount'u 48 puan, bytecount'u 412 azaltmak için @ quat sayesinde .

Tamam, bu yüzden bu cevabın bazı fikirlerini aldım ve kendimin bir versiyonunu yaptım, ancak bunun olumsuz olmayan bir girişi kabul edebilmesi dışında. Bir versiyon bulunabilir burada yapı bloğu biçiminde.

grup

(yeni sürüm biraz sıkıcı görünüyor tbh)

Diğer cevapla benzer komutlar:

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

Rakamları girmek için, bir dizi ineğe ve domuza yumurtlayın. İnekler "n" değerini, domuzlar ise "m" değerini temsil eder. Komut bloğu sistemi inekleri ve domuzları kademeli olarak öldürecek ve gereken değerleri atayacaktır.

Bu cevap, doğal olarak meydana gelen ineklerin veya domuzların olmadığı bir dünyada olduğunuzu ve her koşuda "n" ve "m" de saklanan değerlerin silindiğini varsayar.


Negatif tamsayılar için, "neganimals" olarak 2 farklı hayvan türü kullanabilirsiniz - 5 at, örneğin -5'i temsil edebilir.
Mego

@Mego O zaman dört girdi olurdu, 2 değil.
Addison Crump

Yine de iki girdi olurdu - negatif sayılar için ikinin tamamlayıcısının kullanılmasına eşdeğerdir. Biraz farklı format, ancak yine de bir giriş. En azından benim iki sentim.
Mego

Kullanarak bloklardan tasarruf execute @e[type=Pig] ~ ~ ~ scoreboard players add m a 1edersiniz, böylece herhangi bir saate ihtiyacınız yoktur.
quat

@quat Ooh. Güzel.
Addison Crump

14

Retina , 42 bayt

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

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

Çevrimiçi deneyin!

açıklama

Tekdüze sayı eklemek, dünyadaki en kolay şeydir, ancak bir kere negatif sayılar eklerseniz, işler yanlış olur ...

\d+
$*

Rakamları birliğe çevirerek başlıyoruz. Bu, her numarayı eşleştirerek \d+ve onunla değiştirerek yapılır $*. Bu, Retina'ya özgü bir ikame özelliğidir. Tam sözdizimi count$*characterve countkopyalarını ekler character. Bunların her ikisi de countvarsayılan olarak $&(yani eşleşmenin kendisi) ve charactervarsayılan olarak olduğu yerlerde atlanabilir 1. Böylece her giriş için bir tane nalıyoruz nve hala boşluk eksi olarak potansiyel eksi işaretlerimiz var. Örneğin girdi 8 -5:

11111111 -11111

Şimdi negatif sayılarla baş etmek için ayrı bir -1rakam kullanmak en kolay yoldur . Bu -amaç için kullanacağız .

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

Bu aşama iki şey yapar. Boşluktan, öndeki eksi işaretlerinden kurtulur ve 1eksi işaretinden sonra s'yi -kendi içine çevirir . Bu eşleştirilerek |-1+(yani boşluk veya negatif sayı) ve üzerinde bir harf çevirisi gerçekleştirilerek yapılır. Çevirisi gider 1piçin -_, ama burada, ptüm yazdırılabilir ASCII karakterleri ve genişler _silme aracı. Böylece 1bu maçlarda -s dönüşür ve eksiler ve boşluklar giderilir. Şimdi örneğimiz şuna benziyor:

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

Bu aşama, girişte bir tane pozitif, bir tane negatif sayı olduğu durumu ele alır. Eğer öyleyse, dizgede 1s ve -s olacak ve onların iptal etmelerini istiyoruz. Bu, iki karakterin aralarında bir kelime sınırıyla eşleştirilmesiyle yapılır ( 1s, bir kelime karakteri olarak kabul edilir -). +Dize değişen durana kadar talimatını Retina defalarca bunu yapmak.

Şimdi sadece 1 s ya da sadece - s ile ayrıldık .

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

Bunu tekrar ondalık basamağa dönüştürmek için girişin tamamını eşleştiriyoruz, ancak mümkünse bir -gruba giriyoruz 1. Grubu geri yazarız 1( -negatif sayılar hazırlamak için) ve eşleşmenin uzunluğunu $.&(Retina'ya özgü oyuncu değişikliği özelliği ile) geri yazarız .


2
Bu çok zekice.
Mego

Şimdi sadece rangeRetina'da uygulamak için kolay bir yol olsaydı . Birkaç kez denedim, ancak negatifler bir acı.
mbomb007 18

Bu dilde iki sayı eklemek 40'tan fazla sürüyor mu ?
dkudriavtsev

2
@DmitryKudriavtsev iyi, Retina ... sayılar kavramı yok
Martin Ender

@DmitryKudriavtsev, ve bu sadece tamsayılar ....
msh210

14

Domino , 38.000 bayt veya 37 karo

Bu, Masa Üstü Simülatöründe yaratılmıştır . İşte bir video ve işte dosya . Bir oluşan standart bir yarım-toplayıcı olduğu andiçin kapı 2^1yeri değeri ve bir xoriçin kapı 2^0yer değeri.

görüntü tanımını buraya girin

ayrıntılar

  • I / O
    • Başlat - Bu netlik için dahil edilmiştir (toplam sayılmaz) ve işlevi 'çağıran' veya 'yürüten' şeydir. Giriş verildikten sonra 'basılmalıdır' [Sarı] .
    • Giriş A - Bu, netlik için dahil edilmiştir (toplamda sayılmamaktadır) ve [Yeşil]1 için a olarak işaretlenmiş ve basılmamıştır .0
    • Giriş B - Bu, netlik için dahil edilmiştir (toplam olarak sayılmamaktadır) ve [A]1 için 0 [a] ile işaretlenmiştir .
    • Çıktı - Bu toplam olarak sayılır. Bu dominolar toplamı ilan eder. Sol 2^1ve sağ 2^0 [Siyah] .
  • basma
    • Girdiyi vermek veya zinciri başlatmak için metal mermeri doğrayın
    • Kaldırma gücünü 100%
    • Mermeri istenen domino üzerinde kaldırın
    • Mermer bırak

1
... nasıl?
dkudriavtsev

4
@Mendeleev Tüm ikili mantık geçitlerine sahip olduğunuzda , her şey xD yerine geçer.
NonlinearFruit

10

Haskell, 3 bayt

(+)

Parantezler burada çünkü önek işlevi olması gerekiyor. Bu, + işlevinin bir bölümünü almakla aynıdır, ancak hiçbir argüman uygulanmaz. Aynı zamanda düzgün bir şekilde uygulanan Vektörler, Matrisler, Kompleks sayılar, Yüzen, Çiftler, Akılcı ve Tabii ki Tamsayıcılar gibi çok çeşitli tiplerde çalışır.

Bu Haskell olduğu için, burada yazı tipi düzeyinde nasıl yapılır. Bu çalışma zamanı yerine derleme zamanında yapılacaktır:

-- 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'den uyarlanmış kod


3
eğlenceli gerçek: Bu Cheddar ile birçok dili olduğunu: D
Downgoat

10

Mathematica, 4 2 bayt

Tr

4 çarpı hala düzenli 4 ... Tr tek boyutlu bir listeye uygulanan söz konusu listenin öğelerinin toplamını alır.


9

dc, 2 bayt

+f

Yığına ilk iki öğeyi ekler (önceden alınmış stdin), ardından yığının içeriğini dökülür stdout.

DÜZENLEME: Daha sonra, istenen G / Ç davranışına bağlı olarak, bunun uygulanabileceği birkaç yol var.

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

Sanırım toplamın en eksiksiz formu şöyle olurdu:

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

Bekle! Aynı satırda, boşlukla ayrılmış iki sayı alınabilir! Bu bize verir:

?+p

İlk örneği nasıl kullanacağımı göremiyorum +f, dc -e "?+p"burada iyi çalışıyor.
Jasen

1
@Jasen Yığına +fzaten (tam olarak iki) sayı koyduysanız sürüm çalışır. Gerçekten de dcG / Ç'nin mi yoksa std(in|out)yığın mı olacağını bilmiyordum . Geçmişe bakıldığında, bu yazı üzerine koymak için en az mantıklı seçenek oldu. : /
Joe

kurallar yığının söyleyebileceğim kadar iyi olduğunu söylüyor,
Jasen

9

Shakespeare Programlama Dili , 155 152 bayt

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

Bunu derlemek için drsam94'ün SPL derleyicisini kullanıyorum . Test etmek için:

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

8

Brachylog , 2 bayt

+.

Giriş olarak iki sayıyla bir liste bekliyor

Alternatif olarak, cevabın şunları yapmasını istiyorsanız STDOUT:

+w


7

PHP, 20 bayt

Bu sefer şaşırtıcı derecede kısa:

<?=array_sum($argv);

Komut satırından çalışır, şöyle:

$ php sum.php 1 2

Komut dosyanız da kabul ediyor, php sum.php 1 2 3 4 5 6bu yüzden% 100 emin değilim.
timmyRS 6:16

@timmyRS Gönderim, belirli bir giriş formatı için çalışmalıdır - iki tamsayı. Diğer girişlerle de ilgilenmesi gerektiğini sanmıyorum.
insertusernamehere

Kaynak dosya adı bir rakamla başlıyorsa ne olur? :)
Alex Howansky

@AlexHowansky Psssssssst - kimseye söyleme. ;) Bir dosyadan çalışırken bu tuhaflık. -rBayrağı kullanarak yine de uygulayabilirsiniz - o zaman artık bir problem değil.
insertusernamehere

7

Çedar, 3 bayt

(+)

Bu, Cheddar'ın "işlevsel operatörler" olarak adlandırılan harika bir özelliğidir. Bu fikrin kredisi @ CᴏɴᴏʀO'Bʀɪᴇɴ'e gidiyor.

İşlevsel işleçlere ilişkin daha fazla örnek:

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


6

Geometri Dash - 15 nesneler

Sonunda bitti.
15 nesne fazla değildir, ancak bunu yapmak hala bir kabustur (özellikle de olumsuz sayılar yüzünden).

görüntü tanımını buraya girin

Bunun nasıl yeniden üretileceği için buraya 15 resim eklemek zorunda kalacağım için seviyeyi yeni yükledim. Seviye kimliği 5216804 olduğunu. Açıklama, nasıl çalıştırılacağını anlatır ve kopyalanabilir olduğundan kopyalayabilirsiniz.

Açıklama:

Sol üst tetikleyici (Hızlı Sayım 2), ilk eklentinin 0 olup olmadığını kontrol etti. Öyleyse, ikinci eklentinin pozitif mi yoksa negatif mi olduğunu kontrol etti. Olumlu olsaydı, değeri ikinci eklentiden toplama (BF-tarzı, döngüler kullanarak) aktardı ve negatifse aynı şeyi yapardı.

İkinci eklentinin pozitif mi yoksa negatif mi olduğunu kontrol etmemizin nedeni, ikinci eklentiden bir tane çıkarmamız ve toplamına bir tane eklememiz veya ikinci eklentiye bir tane eklememiz ve sırasıyla toplamdan bir tane çıkarmamız gerekmesidir.

İlk ek sıfır değilse, yukarıdaki işlemi kullanarak pozitif veya negatif olup olmadığını test eder. While döngüsündeki bir yinelemeden sonra, ilk eklentinin sıfır olup olmadığını kontrol eder ve öyleyse, açıklamanın başında açıklanan işlemi yapar.

Geometri Çizgisi BF'ye oldukça benzer olduğundan, bunun dışında bir BF çözümü yapabilirsiniz.


5

MATL, 1 bayt

s

İki tamsayı dizisini giriş olarak kabul eder ve bunları toplar. Aynı zamanda basit bir program çalışırken +, bu diğer diller için zaten gösterilmiştir.

Çevrimiçi Deneyin


5

Perl 5.10, 8 bayt

Eklenecek iki sayı, bunun çalışması için 2 ayrı satırda olmalıdır:

say<>+<>

Bunu burada dene.

Aynı satırda girişi olan bir tane ( -a bayrağı için 14 + 1 bayt )

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

Burada dene!

Aynı satırda girişi olan bir tane ( -a bayrağı için 19 + 1 bayt )

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

Bunu burada dene.

Bir diğeri, dizi varsayılan ayırıcısını değiştirerek ( -a bayrağı için 19 + 1 bayt )

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

Bunu burada dene!


2
Hey, bir başka güzel örnek (eğer bu bir katalog yarışması olacaksa ) Dennis tarafından bu yazıda belirtilen yöntemdir: flaggolf.stackexchange.com/q/32884 (ab) -p.
Dom Hastings,

Yerine say$F[0]+$F[1], say pop()+popeserleri ile (Strawberry 5.20.2 test -E) ve size bir bayt kaydeder.
msh210



5

PowerShell v2 +, 17 bayt

$args-join'+'|iex

Girdiyi, özel diziye önceden yerleştirilmiş iki ayrı komut satırı argümanı olarak alır $args. İşleçle bir dize oluştururuz, -joinonları +ortada bir ile birleştiririz , daha sonra bu dizgiyi Invoke-Expression(buna benzer eval) yönlendiririz.


Bu kadar küçük programlarla uğraşırken, hepsini aynı bayt sayısında girdi almanın birçok yöntemi olduğunu hatırlattığım için @DarthTwon sayesinde.

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

Esnek değilse, PowerShell bir şey değildir.


1
Evet, seni burada takip ediyorum: P Alternatif cevaplar: $args[0]+$args[1]veparam($a,$b)$a+$b
ThePoShWolf

5

> <> , 7 6 3 bayt

+n;

Çevrimiçi tercüman

Ya da -v bayrağıyla TIO'da deneyin.

Çevrimiçi deneyin


Soru bir işlevi tanımlamanıza izin verdiğinden, basit bir +işlemin yeterli olacağına inanıyorum . -vAyrıca, işlev okumadan önce sayıları okumak mümkün olduğundan, maliyetten de kaçınılabilir.
Aaron,

1
@Aaron: Doğru. Ancak bu çözüm zaten başka bir çok dilde yayınlanmış olduğundan, bunu tam bir program olarak tutacağım.
Emigna

1
V bayrağının en fazla +1 bayt olacağını, ancak fishlanguage.com yorumlayıcısını kullanabilmenizin ve toplamınızın 3 bayt olacağını düşünmüştüm ( -v'ye ihtiyaç duymaz).
redstarcoder

@ redstarcoder: Herkes bayrağı her zaman balıklar için 3 bayt (ve göründüğü diğer tüm diller için 1 bayt) olarak belirtir. Neden farklı olduğundan emin değilim ama geçerli bir sebepten dolayı olduğunu varsayıyorum.
Emigna

Ne olursa olsun, sadece fishlanguage.com yorumlayıcısını kullanıyorsanız bayrağa ihtiyacınız yok. Metaya bir bağlantın var mı? Herhangi bir> <> programın başlangıç ​​yığında tamsayıları kullanmak için bayt eklendiğini görmedim (Ben de yaptım).
redstarcoder

5

C, 35 bayt

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

Burada yaptığım şey, boolean veya aritmetik operatörleri kullanmadan tanımlamaktır. Bu, yinelemeli olarak x 'xor' ile toplam bitleri, y ise 've' ile taşınana kadar taşıyacağınız bitleri yapar. İşte ungolfed versiyonu:

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

Neden doğrudan eklemiyorsun?
Esolanging Fruit

Sıkıcı olmak için tamamen golf versiyonunun önemsiz olduğunu buldum.
Bijan

“Tüm cevaplar daha iyi bir puana ulaşmak için biraz çaba göstermeli. Örneğin, kod golf mücadelelerine verilen cevaplar mümkün olduğu kadar kısa olmaya çalışmalıdır (seçilen dilin sınırları dahilinde).” ( codegolf.meta.stackexchange.com/a/7073/61384 adresinden )
Esolanging Fruit

2
Açıkçası, sadece sayıları eklemeyi düşündüm ve kısaltmak için çaba harcadım, sadece alternatif sınırlamalar altında. Bence bu alışılmadık bir soru olduğu için alışılmadık bir cevabı hak ediyor. Bu kural kelimesini takip ederek, daha önce birileri daha kısa bir tane koymuşsa, bir cevap koymak için hiçbir sebep olmayacaktır. Eğer 20 byte python çözümünüzü taktıysanız ve zaten 4 byte'lık bir sürümü olan biriyse, nasıl kopyalayıp yapıştıracağınızı bilmediğinizi kanıtlıyorsunuz. İnsanlar 20 baytlık çözümler ürettiler, çünkü biz orijinalliğe değer veriyoruz.
Bijan

1
Seçtiğiniz dilde rekabetçi olduğu ima edilir . Ancak, meta üzerinde okumaya başladım, cevabınızın geçersiz olduğunu iddia edemiyorum ("Golfier var olsa bile bir cevap herhangi bir algoritma uygulayabilir"), bu yüzden sanırım bırakacağım.
Esolanging Fruit

4

MATLAB, 4 bayt

@LeakyNun sayesinde 1 bayt kaldırıldı

@sum

Bu bir dizi alan ve toplamı veren anonim bir işlevdir. Örnek kullanım:

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

Ne hakkında sum?
Leaky Nun

@LeakyNun Teşekkürler, iyi fikir!
Luis Mendo

43 bayt? xD BTW: Tam program veya fonksiyona sahip olmamız gerektiğini düşündüm , bu yüzden sadece @sumgeçerli bir cevap olduğunu söyleyebilirim . Veya başka bir meta konsensüs var mı?
flawr,

@flawr olduğunu düşünüyorum, evet. Ama bulamadım
Luis Mendo

4
Wooah, sana 43'ten 4 baytlık
XD'yi

4

GoLScript , 1 bayt (rekabet etmeyen)

K

Yığına ilk 2 sayıyı ekler. Bu kadar.

Şimdi onları itmek nasıl üzerinde yığınına, ben hiçbir ipucu var. Bunun mümkün olduğunu sanmıyorum .. öksürük @ CᴏɴᴏʀO'Bʀɪᴇɴ öksürük


Explanation soon to be coming.- Riker 3 Temmuz 16
MD XF

Yaşam Oyunu dili için +1.
HighlyRadioactive

4

Shakespeare Programlama Dili (SPL), 137 135 bayt

Komple program, 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! 

Ve kısa bir açıklama:

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

Bunun en kısa yol olabileceğinden emin değilim. Daha fazla bilgi için resmi sayfasına bakınız.

Düzenleme 1: Kaldırılan :sonra Act Ive Scene Io Roma rakamı göz ardı edilir sonra, böylece 2 bayt tasarrufu her şeyin göründüğü gibi.


5
Bu geçerli değil. Karakterler Shakespeare'in oyunlarından olmalı ve: orada olmalı. Ayrıca, açıklama için her karakterin adından sonra virgül gerekir.
Oliver Ni,

4

x86_32 makine kodu, 2 bayt

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

İki değerin zaten ecx ve eax sicillerinde bulunduğunu varsayarsak, ekleme talimatının gerçekleştirilmesi iki sicilin değerlerini ekleyecek ve sonucu hedef kayıt defterinde saklayacaktır.

Satır içi montaj C ile yazılmış ve tam bir program görebilirsiniz burada . Sargının C'ye yazılması, girdi sağlamayı ve test yapmayı kolaylaştırır, ancak gerçek ekleme işlevi bu iki bayta kadar azaltılabilir.


3
Bu bir işlev değil, sadece bir snippet. Bir rettalimata da ihtiyacınız var (bir bayt). Ve bu eax, geçici bir kayıt defteri olarak kullanılan özel bir arama kuralını varsayar . (Irvine32 asm öğretim kütüphanesi bunu yapar, ancak x86-32 veya x86-64 için hiçbir standart çağrı sözleşmesi bunu yapmaz, ARM'den farklı olarak, geri dönüş değer kaydının r0ilk bağımsız geçiş yazmacı olduğu yerlerdedir.) Özel arama kuralları iyi asm yine de çalışır, bu nedenle Microsoft veya gcc için 3 bayt lea (%ecx, %edx), %eax+ 1 bayt olarak değiştirmeniz gerekmez . ret__fastcall-mregparm
Peter Cordes

1
Yine de, bir yığın argüman çağırma konvansiyonu için ilginç bir zorluk. popyalnızca 1 bayt, ancak espgöreli adresleme modları bir SIB baytına ihtiyaç duyar. Böylece arayanlar aranan bir çağrı kuralı pop %ecx(dönüş adresi), pop %eax/ pop %edx/ add %edx, %eax(2 bayt) / jmp *%ecx(2 bayt) = toplam 7 bayt olabilir. vs mov 4(%esp), %eax(4B) / add 8(%esp), %eax(4B) / ret= 9 bayt veya kullanarak o bir arayan-pop versiyonu için 11 bayt ret imm16O doğru yaptıysam,. Temel olarak ESP'li SIB için 1 bayt ve her insn'de disp8 için ekstra 1 bayt.
Peter Cordes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.