Dodaj dwie liczby

44

Wejście: dwie liczby całkowite. Korzystnie liczby całkowite dziesiętne, ale można stosować inne formy liczb. Można je podać kodowi na standardowym wejściu, jako argumenty programu lub funkcji albo jako listę.

Wynik: ich suma. Użyj tego samego formatu dla liczb całkowitych wyjściowych, jak liczb całkowitych wejściowych. Na przykład dane wejściowe 5 16prowadziłyby do danych wyjściowych 21.

Ograniczenia: Brak standardowych luk. To jest , odpowiedź w najmniejszej ilości bajtów wygrywa.

Uwagi: To powinno być dość trywialne, ale jestem zainteresowany, aby zobaczyć, jak można to zaimplementować. Odpowiedź może być kompletnym programem lub funkcją, ale proszę określić, który to jest.

Przypadki testowe:

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

Lub jako CSV:

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

Tabela liderów

dkudriavtsev
źródło
26
Jest to dość trywialne, ale nie tak naprawdę prostsze niż np. Katalog Hello World. Biorąc pod uwagę, że możliwość dodawania liczb całkowitych jest jednym z naszych dwóch wymagań dotyczących języków programowania, powiedziałbym, że warto je mieć, jeśli są odpowiednio określone.
Dennis
1
Czy odpowiedź może przyjmować dane wejściowe z poprzedzającymi zerami jako domyślną? np. 5 16wprowadzono jako005 016
FinW
@FinW Pewnie. Dopóki nie zostaną zinterpretowane jako ósemkowe.
dkudriavtsev

Odpowiedzi:

38

Galaretka , 1 bajt

+

Wypróbuj online!

Działa również w 05AB1E, faktycznie, APL, Braingolf, ,,, (Commata), Factor, Forth, Implicit, J, Julia, K, kdb +, Keg, Ly, MATL, Pyke, Deorst i Q.

Dennis
źródło
3
Działa również w Swift.
Zacharý
3
Pyth również @ Zacharý
Stan Strum
66

Minecraft 1.10, 221 znaków (nie konkuruje)

Zobacz, z tym mamy do czynienia przy tworzeniu map Minecraft.

Poza tym: w Minecraft nie ma sposobu, aby wprowadzić ciąg znaków, więc oszukuję trochę, wprowadzając liczby do samego programu. (Jest to nieco uzasadnione, ponieważ sporo map, takich jak Minecraft Bingo Lorgon111, wymaga kopiowania i wklejania poleceń do czatu w celu wprowadzenia liczby).

Dziękuję już za filtr MCEdit Block Labels .

za

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

Nie konkuruje z powodu trudności z wejściem i nie mam pojęcia, jak liczyć bajty w tej rzeczy (system blytes jest wadliwy dla bloków poleceń).

quat
źródło
4
To zdecydowanie najlepszy. Niesamowity.
dkudriavtsev
Nie wydaje mi się, aby kodowanie danych wejściowych było poprawne, ale nie wiem wystarczająco dużo o blokach poleceń w Minecrafcie, aby móc ocenić, czy istnieje inny sposób na wejście danych niż kodowanie na stałe. Być może jeden z naszych stałych ekspertów Minecraft mógłby ważyć.
Mego
3
Tak, w MC nie ma wprowadzania tekstu, oprócz „skopiuj i wklej to polecenie”. Klawiatura numeryczna jest możliwa z opcją / tellraw, ale będzie ledwie użyteczna dla wszystkich graczy, nie wspominając o 500kb dzięki nieprzyzwoicie ścisłej składni / tellraw. Myślę, że alternatywą byłoby policzenie czegoś na świecie, takiego jak świnie + krowy lub czerwona wełna + niebieska wełna.
quat
1
@ quat Ponieważ zwykle używamy leja do liczenia rzeczy w Minecrafcie, myślę, że to byłaby właściwa droga. Innym sposobem radzenia sobie z tym byłoby również wykonalne w czystym czerwonym kamieniu za pomocą dźwigni. Ponieważ nie mamy żadnych ograniczeń, a bit jest największą naturalną wartością osiągalną w Minecrafcie, spowodowałoby to po prostu dodanie dwóch bitów z wyjściem dwóch bitów (możliwe: 0,1,2Innym rozwiązaniem byłoby przyjęcie 2 bajtów i wyjście na 9 przewodach, ale byłoby znacznie mniej golfa
Katenkyo
39

Binarny rachunek lambda , 4,125 bajtów

Dane wejściowe i wyjściowe jako liczby kościelne .

00000000 01011111 01100101 11101101 0

W rachunku lambda jest to λ m . λ n . λ f . λ x . m f ( n f x ).

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


Rachunek lambda to zwięzły sposób opisu odwzorowania (funkcji).

Na przykład to zadanie można zapisać jako λ x . λ y . x + y

Należy zauważyć, że nie jest to lambda (funkcja), która przyjmuje dwa argumenty. To właściwie zagnieżdżona lambda. Zachowuje się jednak jak lambda, która przyjmuje dwa argumenty, więc można go nieformalnie opisać jako taki. Każda lambda formalnie bierze tylko jeden argument.

Na przykład, jeśli zastosujemy tę lambda do 3 i 4:

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

Tak więc pierwsza lambda faktycznie zwraca inną lambda.


Cyfry kościelne to sposób na pozbycie się dodatkowych znaków, pozostawiając tylko symbole i zmienne lambda.

Każda liczba w systemie kościelnym jest w rzeczywistości lambda, która określa, ile razy funkcja jest stosowana do elementu.

Niech funkcją będzie f, a elementem będzie x .

Tak więc liczba 1 odpowiada λ f . λ x . f x , co oznacza zastosowanie f do x dokładnie raz.

Na przykład liczba 3 to λ f . λ x . f ( f ( f x )), co oznacza zastosowanie f do x dokładnie trzy razy.


W związku z tym, dodanie dwóch cyfr Church (powiedzmy, m i n ) ze sobą, to jest takie same jak zastosowania F do x , m + n razy.

Możemy zauważyć, że jest to to samo, co najpierw zastosowanie f do x , n razy, a następnie zastosowanie f do uzyskanego elementu m razy.

Na przykład 2 oznaczałoby, f(f(x))a 3 oznaczałoby f(f(f(x))), więc 2 + 3 byłoby f(f(f(f(f(x))))).

Aby zastosować f do x , n razy, mamy n f x .

Można zobaczyć m i n jako funkcje biorąc dwa argumenty, nieformalnie.

Następnie ponownie stosujemy f do tego wynikowego elementu, m razy: m f ( n f x ).

Następnie dodajemy z powrotem płytę kotła, aby uzyskać λ m . λ n . λ f . λ x . m f ( n f x ).


Teraz musimy przekonwertować go na indeks De Bruijn .

Po pierwsze, liczymy „względną odległość” między każdą zmienną do deklaracji lambda. Na przykład m miałoby odległość 4, ponieważ zadeklarowano 4 jagnięta „temu”. Podobnie, n miałoby odległość 3, f miałoby odległość 2, a x miałby odległość 1.

Piszemy to jako następującą formę pośrednią: λ m . λ n . λ f . λ x . 4 2 (3 2 1)

Następnie usuwamy deklaracje zmiennych, pozostawiając nam: λ λ λ λ 4 2 (3 2 1)


Teraz konwertujemy go na binarny rachunek lambda .

Reguły są następujące:

  • λ staje się 00.
  • m n (grupowanie) staje się 01 m n.
  • liczby i stają się 1 i razy + 0, na przykład 4 staje się 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

Leaky Nun
źródło
18
Chciałbym zobaczyć plik źródłowy 4.125 bajtów, który przekazujesz do interpretera / kompilatora.
Martin Ender
8
@MartinEnder Powiedz to do każdej odpowiedzi tutaj .
Leaky Nun
5
Chciałbym zobaczyć rozwiązanie o wielkości 0,875 bajtów.
Pan Lister
3
Zgodnie z meta konsensusem , chyba że możesz zapisać program jako plik z ułamkową ilością bajtów, musisz zaokrąglić w górę.
Pavel
24

Common Lisp, 15 bajtów

(+(read)(read))
Byeonggon Lee
źródło
2
Witamy w Programowaniu Puzzle i Code Golf!
Dennis
Stosunkowo nie znam CLisp, ale czy można usunąć spacje? (+(read)(read))
Mego
@Mego Masz rację, jest to możliwe. Nie wiedziałem o tym, ponieważ jestem również nowy w Common Lisp, dzięki za informacje! Zredagowałem źródło
Byeonggon Lee,
3
Chyba oboje się tutaj czegoś nauczyliśmy! Witamy na pokładzie PPCG!
Mego
21

Koty stosu , 8 + 4 = 12 bajtów

]_:]_!<X

Uruchom z -mnflagami. Wypróbuj online!

Gra w Stack Cats jest bardzo sprzeczna z intuicją, więc powyższy program został znaleziony z kilkudniowym brutalnym wymuszaniem. Dla porównania, bardziej intuicyjne, napisane przez człowieka rozwiązanie korzystające z *(...)>szablonu ma dwa bajty dłużej

*(>-_:[:)>

-lnzamiast tego z flagami (wyjaśnienie znajduje się na dole tego postu).

Wyjaśnienie

Oto podkład na Stack Cats:

  • Stack Cats to odwracalny ezoteryczny język, w którym lustro fragmentu kodu odwraca efekt oryginalnego fragmentu. Programy muszą być również odbiciami lustrzanymi samego siebie - to koniecznie oznacza, że ​​programy o parzystej długości są albo nieoperacyjnymi, albo nieskończonymi pętlami, a wszystkie nietrywialne programy kończące mają nieparzystą długość (i są zasadniczo sprzężeniem operatora centralnego).
  • Ponieważ zawsze sugerowana jest połowa programu, jedną połowę można pominąć za pomocą flagi -mlub -l. Tutaj -mużywana jest flaga, więc powyższy pół programu faktycznie się rozwija ]_:]_!<X>!_[:_[.
  • Jak sama nazwa wskazuje, Stack Cats jest oparty na stosie, a stosy są zerowe z zerami (tzn. Operacje na pustym stosie zwracają 0). Stack Cats faktycznie używa taśmy stosów, np. <I >przesuwa odpowiednio jeden stos w lewo i jeden stos w prawo.
  • Zera na dole stosu są połykane / usuwane.
  • Wszystkie dane wejściowe są wypychane do początkowego stosu wejściowego, z pierwszym wejściem na górze, a dodatkowe -1 poniżej ostatniego wejścia. Dane wyjściowe są wykonywane na końcu, z wykorzystaniem zawartości bieżącego stosu (z opcjonalnym -1 na dole jest ignorowane). -noznacza numeryczne we / wy.

A oto ślad rozszerzonego pełnego programu ]_:]_!<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+bjest następnie wyprowadzany, a podstawa -1 jest ignorowana. Zauważ, że najtrudniejszą częścią tego rozwiązania jest to, że stos wyjściowy musi mieć -1na dole znak wyjściowy, w przeciwnym razie stos wyjściowy po prostu [-1]zignoruje podstawę -1, a stos wyjściowy [0]spowoduje, że podstawa zero zostanie połknięta (ale dane wyjściowe [2]na przykład stos byłby w 2porządku).


Dla zabawy, oto pełna lista znalezionych powiązanych rozwiązań o tej samej długości (lista może być niekompletna):

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

*(>-_:[:)>Rozwiązanie jest dłuższy, ale jest bardziej intuicyjny napisać ponieważ używa *(...)>szablonu. Ten szablon rozwija się, <(...)*(...)>gdy jest używany z -lflagą, co oznacza:

<       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

Jako taki *(...)>szablon oznacza, że ​​pierwsza pętla jest pomijana, ale druga jest wykonywana. Pozwala to na prostsze programowanie, ponieważ nie musimy martwić się efektami pętli w drugiej połowie programu.

W tym przypadku wnętrze pętli to:

>       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

Końcowy >w szablonie przenosi nas z powrotem do stosu wejściowego, gdzie a+bjest wyprowadzany.

Sp3000
źródło
19

Uszkodzenie mózgu , 6 bajtów

({}{})

Wypróbuj online!

Brain-flak to naprawdę interesujący język z dwoma głównymi ograniczeniami.

  1. Jedynymi poprawnymi znakami są nawiasy, tzn. Dowolny z następujących znaków:

    (){}[]<>
    
  2. Każdy zestaw nawiasów musi być całkowicie dopasowany, w przeciwnym razie program jest nieprawidłowy.

Zestaw nawiasów, między którymi nie ma nic, nazywa się „nilad”. Nilad tworzy pewną wartość liczbową i wszystkie te nilady obok siebie są sumowane. Zestaw nawiasów z czymś między nimi nazywa się „monadą”. Monada to funkcja, która przyjmuje argument liczbowy. Zatem nawiasy wewnątrz monady są oceniane, i to jest argument za monadą. Oto bardziej konkretny przykład.

() Nilad równa 1. zatem następujące mózgu flak kodu:

()()()

Jest oceniany na 3. () Monada wypycha zawartą w nim wartość na stos globalny. Więc następujące

(()()())

wypycha 3. {}Nilad wyskakuje wartość na stosie. Ponieważ zawsze dodawane są kolejne nilady, ciąg {}sumuje wszystkie najlepsze elementy na stosie. Więc mój kod to w zasadzie:

push(pop() + pop())
DJMcMayhem
źródło
15

Minecraft 1.10.x, 924 512 bajtów

Dzięki @ quat za zmniejszenie blytecount o 48 punktów i bytecount o 412.

W porządku, więc wziąłem niektóre pomysły z tej odpowiedzi i stworzyłem własną wersję, tyle że ta jest w stanie zaakceptować nieujemne dane wejściowe. Wersja znajduje się tutaj w formacie bloku struktury.

Grupa

(nowa wersja wygląda trochę nudno)

Podobne polecenia jak druga odpowiedź:

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

Aby wprowadzić liczby, odradzaj się u wielu krów i świń. Krowy będą reprezentować wartość „n”, a świnie będą reprezentować wartość „m”. System blokowania poleceń stopniowo zabija krowy i świnie i przypisuje wartości w razie potrzeby.

Ta odpowiedź zakłada, że ​​jesteś w świecie bez naturalnie występujących krów i świń oraz że wartości zapisane w „n” i „m” są usuwane przy każdym uruchomieniu.

Addison Crump
źródło
W przypadku ujemnych liczb całkowitych można użyć 2 innych rodzajów zwierząt jako „negatywnych” - na przykład 5 koni może reprezentować -5.
Mego
@Mego To byłyby cztery wejścia, a nie 2.
Addison Crump,
Nadal byłyby to dwa dane wejściowe - jest to odpowiednik użycia uzupełnienia dwóch liczb ujemnych. Nieco inny format, ale wciąż jedno wejście. Przynajmniej to moje dwa centy.
Mego
Może być w stanie oszczędzać na blokach za pomocą execute @e[type=Pig] ~ ~ ~ scoreboard players add m a 1, więc nie potrzebujesz żadnej formy zegara.
quat
@quat Ooh. Miły.
Addison Crump,
14

Siatkówka , 42 bajty

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

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

Wypróbuj online!

Wyjaśnienie

Dodawanie liczb w jednostkach jest najłatwiejszą rzeczą na świecie, ale po wprowadzeniu liczb ujemnych sprawy stają się dziwne ...

\d+
$*

Zaczynamy od przeliczenia liczb na unary. Odbywa się to poprzez dopasowanie każdego numeru do \d+i zastąpienie go $*. Jest to funkcja substytucji specyficzna dla siatkówki. Pełna składnia to count$*characteri wstawia countkopie character. Oba można pominąć, gdy countdomyślnie $&(tj. Samo dopasowanie) i characterdomyślnie 1. Tak więc dla każdego wejścia notrzymujemy je ni nadal mamy potencjalne znaki minus, a także separator przestrzeni. Np. Dane wejściowe 8 -5dają:

11111111 -11111

Teraz, aby radzić sobie z liczbami ujemnymi, najłatwiej jest użyć osobnej -1cyfry. Wykorzystamy -do tego celu.

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

Ten etap robi dwie rzeczy. Pozbywa się spacji, wiodących znaków minus i zamienia 1s po znaku minus w -siebie. Odbywa się to poprzez dopasowanie |-1+(tj. Spację lub liczbę ujemną) i wykonanie transliteracji. Transliteracja przechodzi od 1pdo -_, ale tutaj prozszerza się na wszystkie drukowalne znaki ASCII i _oznacza usuń. Więc 1s w tych meczach zamieniają się w -s, a minusy i spacje są usuwane. Nasz przykład wygląda teraz tak:

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

Ten etap obsługuje przypadek, w którym na wejściu znajduje się jedna liczba dodatnia i jedna ujemna. Jeśli tak, w ciągu będą znajdować się 1s i -si chcemy, aby anulowały. Odbywa się to poprzez dopasowanie dwóch znaków z granicą między nimi (ponieważ 1s jest uważane za znak słowny, a -nie jest), i zastąpienie dopasowania niczym. W +przesyła zlecenie Retina to zrobić, aż łańcuch zatrzyma się zmienia.

Teraz zostaje nam tylko 1 s lub tylko - s.

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

Aby przekonwertować to z powrotem na dziesiętne, dopasowujemy całe dane wejściowe, ale jeśli to możliwe, przechwytujemy -grupę 1. 1Zapisujemy grupę (aby wstawić -liczby ujemne), a następnie zapisujemy długość dopasowania za pomocą $.&(także funkcji substytucji specyficznej dla siatkówki).

Martin Ender
źródło
2
To jest bardzo sprytne.
Mego
Teraz, gdyby istniał prosty sposób na wdrożenie rangew Retina. Próbowałem kilka razy, ale negatywy to ból.
mbomb007
Aby dodać dwie liczby w tym języku, potrzeba ponad 40 bajtów ?
dkudriavtsev
2
@DmitryKudriavtsev dobrze, Retina nie ma pojęcia liczb ...
Martin Ender
@DmitryKudriavtsev, a to tylko liczby całkowite ....
msh210,
14

Domino , 38 000 bajtów lub 37 płytek

To jest tworzony w Tabletop Simulator . Oto wideo, a tutaj plik . Jest to standardowy półdodujący, złożony z andbramki dla 2^1wartości miejsca i xorbramki dla 2^0wartości miejsca.

wprowadź opis zdjęcia tutaj

Detale

  • I / O
    • Start - jest to uwzględnione dla przejrzystości (nie wliczane do sumy) i jest tym, co „wywołuje” lub „wykonuje” funkcję. Należy „nacisnąć” po wprowadzeniu danych wejściowych [Żółty] .
    • Wejście A - Uwzględniono to dla jasności (nie wlicza się do sumy całkowitej) i jest „wciśnięte”, aby wskazać a, 1i nie wciśnięte dla 0 [Zielona] .
    • Wejście B - Zostało uwzględnione dla przejrzystości (nie liczone do całkowitej) i jest „wciśnięte”, aby wskazać a, 1i nie wciśnięte dla 0 [Niebieskiego] .
    • Wyjście - jest liczone do sumy. Te domina deklarują sumę. Po lewej jest, 2^1a po prawej 2^0 [Czarny] .
  • Groźny
    • Aby dać wkład lub uruchomić łańcuch, spawn metalowy marmur
    • Ustaw siłę podnoszenia na 100%
    • Podnieś marmur powyżej pożądanego domina
    • Upuść marmur
Nieliniowe Owoce
źródło
1
... w jaki sposób?
dkudriavtsev
4
@Mendeleev Gdy masz już wszystkie binarne bramki logiczne , wszystko inne wchodzi na swoje miejsce xD.
NielinioweOwoc
10

Haskell, 3 bajty

(+)

Nawiasy są tutaj, ponieważ musi to być funkcja prefiksu. Jest to to samo, co pobranie sekcji funkcji +, ale nie zastosowano żadnych argumentów. Działa również na wielu różnych typach, takich jak odpowiednio zaimplementowane wektory, macierze, liczby zespolone, zmiennoprzecinkowe, podwajanie, wymierne i oczywiście liczby całkowite.

Ponieważ jest to Haskell, oto jak to zrobić na poziomie typu. Zostanie to wykonane w czasie kompilacji zamiast w czasie wykonywania:

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

Kod zaadaptowany z Haskell Wiki

Lazersmoke
źródło
3
fajny fakt: to jest poliglota z Cheddar: D
Downgoat
10

Mathematica, 4 2 bajty

Tr

Przekreślone 4 jest nadal regularne 4 ... Tr zastosowane do jednowymiarowej listy pobiera sumę elementów wspomnianej listy.

LegionMammal978
źródło
9

dc, 2 bajty

+f

Dodaje dwa górne elementy na stosie (poprzednio wzięte z stdin), a następnie zrzuca zawartość stosu do stdout.

EDYCJA: Po dalszym rozważeniu wydaje się, że można to zaimplementować na kilka sposobów, w zależności od pożądanego zachowania We / Wy.

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

Podejrzewam, że najbardziej kompletny formularz sumy byłby następujący:

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

Czekać! Dwie liczby mogą być brane na tej samej linii, oddzielone spacją! To daje nam:

?+p
Joe
źródło
Nie widzę, jak użyć pierwszego przykładu +f, dc -e "?+p"tutaj działa dobrze.
Jasen
1
@Jasen +fWersja działa, jeśli już umieściłeś (dokładnie dwie) liczby na stosie. Naprawdę nie wiedziałem, czy dcto powinno być we / wy, std(in|out)czy stos. Z perspektywy czasu była to najmniej sensowna opcja umieszczenia na szczycie postu. : /
Joe
zasady mówią, że stos jest OK, o ile mi wiadomo,
Jasen
9

Język programowania Szekspira , 155 152 bajtów

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

Nie golfowany:

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]

Używam kompilatora SPL drsam94 do skompilowania tego. Testować:

$ python splc.py sum.spl > sum.c
$ gcc sum.c -o sum.exe
$ echo -e "5\n16" | ./sum
21
Miedź
źródło
8

Brachylog , 2 bajty

+.

Oczekuje listy z dwiema liczbami jako danymi wejściowymi

Ewentualnie, jeśli chcesz uzyskać odpowiedź na STDOUT:

+w
Fatalizować
źródło
7

JavaScript (ES6), 9 bajtów

a=>b=>a+b
Patrick Roberts
źródło
Nie sądzę zagnieżdżonego liczy funkcjonować jako funkcję dwóch wejściowych w javascript
dumnego haskeller
4
@proudhaskeller tak to robi
Patrick Roberts
1
Ten działa również w C #.
Grax32,
7

PHP, 20 bajtów

Tym razem zaskakująco krótko:

<?=array_sum($argv);

Działa z wiersza poleceń, na przykład:

$ php sum.php 1 2
wstawić nazwę tutaj
źródło
Twój skrypt również akceptuje, php sum.php 1 2 3 4 5 6więc nie jestem w 100% pewien, czy to w porządku.
timmyRS
@ timmyRS Przesyłanie powinno działać dla określonego formatu wejściowego - dwóch liczb całkowitych. Nie sądzę, że powinien obsługiwać także inne dane wejściowe.
inserttusernamehere
Co jeśli nazwa pliku źródłowego zaczyna się od cyfry? :)
Alex Howansky
@AlexHowansky Psssssssst - nikomu nie mów. ;) To jest dziwactwo, kiedy działa z pliku. Nadal możesz wykonać go za pomocą -rflagi - to już nie jest problem.
inserttusernamehere
7

Cheddar, 3 bajty

(+)

Jest to fajna funkcja Cheddara zwana „operatorami funkcjonalizowanymi”. Podziękowania za ten pomysł należą do @ CᴏɴᴏʀO'Bʀɪᴇɴ.

Oto więcej przykładów funkcjonalizowanych operatorów:

(+)(1,2) // 3
(/)(6,2) // 3
(-)(5)   // -5
Downgoat
źródło
6

Python, 11 3 bajty

sum

int.__add__

Prosty operator specjalny.

Leaky Nun
źródło
6

Geometry Dash - 15 obiektów

Wkońcu zrobione.
15 obiektów to niewiele, ale nadal był to koszmar (szczególnie ze względu na liczby ujemne).

wprowadź opis zdjęcia tutaj

Ponieważ musiałbym wstawić tutaj 15 zdjęć w celu odtworzenia tego, właśnie załadowałem poziom. Identyfikator poziomu to 5216804. Opis mówi, jak go uruchomić i możesz go skopiować, ponieważ można go kopiować.

Wyjaśnienie:

Lewy górny wyzwalacz (Natychmiastowa liczba 2) sprawdził, czy pierwszy dodatek miał wartość 0. Jeśli tak, sprawdził, czy drugi dodatek był dodatni czy ujemny. Gdyby było dodatnie, przekazało wartość z drugiego dodatku do sumy (styl BF, używając pętli), a jeśli byłoby ujemne, zrobiłby to samo.

Powodem, dla którego musimy sprawdzić, czy drugi dodatek jest dodatni czy ujemny, jest to, że musielibyśmy odjąć jeden z drugiego dodatku i dodać jeden do sumy lub dodać jeden do drugiego dodatku i odpowiednio odjąć jeden od sumy.

Jeśli pierwszy dodatek nie jest równy zero, sprawdza, czy jest dodatni czy ujemny, korzystając z powyższego procesu. Po jednej iteracji w pętli while sprawdza, czy pierwszy dodatek jest równy zero, a jeśli tak, to wykonuje proces opisany na początku objaśnienia.

Ponieważ Geometry Dash jest niezwykle podobny do BF, możesz z tego zrobić rozwiązanie BF.

MilkyWay90
źródło
5

MATL, 1 bajt

s

Akceptuje tablicę dwóch liczb całkowitych jako dane wejściowe i sumuje je. Podczas gdy prosty program+ działa również , który został już pokazany dla innych języków.

Wypróbuj online

Suever
źródło
5

Perl 5.10, 8 bajtów

Dwie liczby do dodania muszą znajdować się w 2 osobnych wierszach, aby ten działał:

say<>+<>

Spróbuj tego tutaj.

Jeden z wejściem w tym samym wierszu ( 14 + 1 bajtów dla flagi -a )

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

Wypróbuj tutaj!

Jeden z wejściem w tym samym wierszu ( 19 + 1 bajtów dla flagi -a )

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

Spróbuj tego tutaj.

Kolejny, zmieniając domyślny separator tablicy ( 19 + 1 bajtów dla flagi -a )

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

Wypróbuj tutaj!

Paul Picard
źródło
2
Hej, innym dobrym przykładem (jeśli stanie się to wyzwaniem dla katalogu) jest metoda opisana przez Dennisa w tym poście: codegolf.stackexchange.com/q/32884 (ab) przy użyciu -pflagi.
Dom Hastings,
Zamiast say$F[0]+$F[1], say pop()+popprace (testowane z truskawek 5.20.2 -E) i oszczędza bajt.
msh210
5

Fuzzy Octo Guacamole , 1 bajt

a

Funkcja, która pobiera dane wejściowe z góry stosu i dane wyjściowe poprzez wypychanie do stosu.

Przykład działający w REPL:

>>> 8 9 :
[8,9]
>>> a :
17
Rɪᴋᴇʀ
źródło
5

PowerShell v2 +, 17 bajtów

$args-join'+'|iex

Pobiera dane wejściowe jako dwa osobne argumenty wiersza polecenia, które są wstępnie wypełniane w specjalnej tablicy $args. Tworzymy ciąg z -joinoperatorem, łącząc je razem ze +środkiem, a następnie potokujemy ten ciąg do Invoke-Expression(podobnie do eval).


Dzięki @DarthTwon za przypomnienie mi, że w przypadku tak minimalnych programów istnieje wiele metod pobierania danych wejściowych przy tej samej liczbie bajtów.

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

PowerShell jest niczym, jeśli nie elastyczny.

AdmBorkBork
źródło
1
Tak, tylko cię $args[0]+$args[1]param($a,$b)$a+$b
śledzę
5

> <> , 7 6 3 bajtów

+n;

Tłumacz online

Lub spróbuj na TIO z flagą -v.

Wypróbuj online

Emigna
źródło
Ponieważ pytanie pozwala zdefiniować funkcję, uważam, że wystarczyłoby proste +: wyskoczyłoby dwie liczby ze stosu i odłożyłoby wynik ich dodania z powrotem na stos. -vMożna również uniknąć kosztu , ponieważ odczytanie numerów można było wykonać wcześniej przy wywołaniu funkcji.
Aaron
1
@Aaron: Prawda. Ale ponieważ to rozwiązanie zostało już opublikowane w kilku innych językach, zachowam to jako pełny program.
Emigna
1
Myślałem, że flaga v będzie miała maksymalnie +1 bajt, ale tak czy inaczej możesz użyć interpretera fishlanguage.com, a twoja suma to 3 bajty (nie potrzebuje -v).
redstarcoder
@redstarcoder: Każdy zawsze określa flagę jako 3 bajty dla ryb (i 1 bajt dla wszystkich innych języków, jak się wydaje). Nie jestem pewien, dlaczego jest inaczej, ale zakładam, że dzieje się tak z ważnego powodu.
Emigna
Niezależnie od tego flaga nie jest potrzebna, jeśli używasz tylko interpretera fishlanguage.com. Czy masz link do meta? Nie widziałem, aby żaden program> <> dodawał bajty do używania liczb całkowitych na początkowym stosie (ja też to zrobiłem).
redstarcoder,
5

C, 35 bajtów

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

To, co zrobiłem tutaj, to zdefiniowane dodawanie bez użycia operatorów logicznych lub arytmetycznych. To rekurencyjnie czyni x sumę bitów przez „xor”, a y bity przenoszenia przez „i”, dopóki nie będzie przeniesienia. Oto wersja bez golfa:

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
źródło
Dlaczego nie dodajesz bezpośrednio?
Esolanging Fruit
Przekonałem się, że nudne jest to, że wersja z pełnym golfem jest banalna.
Bijan
„Wszystkie odpowiedzi powinny wykazywać wysiłek w kierunku osiągnięcia lepszego wyniku. Na przykład odpowiedzi na wyzwania związane z golfem kodowym powinny być możliwie jak najkrótsze (w ramach ograniczeń wybranego języka)”. (z codegolf.meta.stackexchange.com/a/7073/61384 )
Esolanging Fruit
2
Oczywiście myślałem o dodaniu liczb i dołożyłem starań, aby był on krótszy, tylko przy naprzemiennych ograniczeniach. Myślę, że ponieważ jest to pytanie niekonwencjonalne, zasługuje na niekonwencjonalną odpowiedź. Zgodnie z tą zasadą słowo w słowo nie byłoby powodu, aby kiedykolwiek udzielać odpowiedzi, jeśli ktoś już postawił krótszą. Jeśli umieścisz 20-bajtowe rozwiązanie python, a ktoś już ma wersję 4-bajtową, to udowodnisz, że nie wiesz, jak skopiować i wkleić. Ludzie stawiają na 20 bajtów, ponieważ cenimy sobie oryginalność.
Bijan
1
Sugeruje się, że jest konkurencyjny w wybranym języku. Jednak po przeczytaniu meta wydaje się, że nie mogę twierdzić, że twoja odpowiedź jest nieprawidłowa („Odpowiedź może zaimplementować dowolny algorytm, nawet jeśli istnieją golfiści”), więc chyba go porzucę.
Esolanging Fruit
4

MATLAB, 4 bajty

1 bajt usunięty dzięki @LeakyNun

@sum

Jest to anonimowa funkcja, która pobiera tablicę i podaje sumę. Przykładowe zastosowanie:

>> f = @sum
f = 
    @sum
>> f([3 4])
ans =
     7
Luis Mendo
źródło
Co sum?
Leaky Nun
@LeakyNun Dzięki, dobry pomysł!
Luis Mendo,
43 bajty? xD BTW: Myślałem, że musimy mieć pełny program lub funkcję , więc powiedziałbym, że tylko @sumpoprawna odpowiedź. A może istnieje inny meta konsensus?
flawr
@flawr Myślę, że tak, tak. Ale nie mogłem go znaleźć
Luis Mendo
4
Ooooo, pomogłem ci zmniejszyć z 43 do 4 bajtów XD
błąd
4

GoLScript , 1 bajt (nie konkuruje)

K

Dodaje 2 najlepsze liczby ze stosu. Otóż ​​to.

Teraz, jak wcisnąć je na stos, nie mam pojęcia. Nie sądzę, że to możliwe .. kaszel @ kaszel @ CᴏɴᴏʀO'Bʀɪᴇɴ

Rɪᴋᴇʀ
źródło
Explanation soon to be coming.- Riker, 3 lipca 16
MD XF
+1 za język Game of Life.
HighlyRadioactive
4

Język programowania Szekspira (SPL), 137 135 bajtów

Kompletny program, gra w golfa:

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

I krótkie wyjaśnienie:

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

Nie jestem do końca pewien, czy jest to najkrótszy możliwy czas. Sprawdź oficjalną stronę, aby uzyskać więcej informacji.

Edycja 1: Usunięto :później Act Ii Scene Iwydaje się, że wszystko po rzymskiej cyfrze jest ignorowane, co oszczędza 2 bajty.

Ioannes
źródło
5
To nie jest poprawne. Postacie muszą pochodzić ze sztuk Szekspira i muszą tam być. Do opisu potrzebny jest także przecinek po nazwie każdej postaci.
Oliver Ni
4

kod maszynowy x86_32, 2 bajty

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

Zakładając, że dwie wartości znajdują się już w rejestrach ecx i eax, wykonanie instrukcji add spowoduje dodanie wartości dwóch rejestrów i zapisanie wyniku w rejestrze docelowym.

Możesz zobaczyć pełny program napisany w C i wbudowany tutaj . Napisanie opakowania w C ułatwia wprowadzanie danych wejściowych i przeprowadzanie testów, ale faktyczną funkcję dodawania można zredukować do tych dwóch bajtów.

davey
źródło
3
To nie jest funkcja, tylko fragment. Potrzebujesz także retinstrukcji (jeden bajt). I to przy założeniu niestandardowej konwencji wywoływania, w której eaxjest używany jako rejestr przechodzący arg. (Biblioteka nauczania asm Irvine32 to robi, ale nie robią tego żadne standardowe konwencje wywoływania dla x86-32 lub x86-64, w przeciwieństwie do ARM, gdzie rejestr wartości zwracanej r0jest również pierwszym rejestrem przekazującym argument.) Niestandardowe konwencje wywoływania są odpowiednie funkcje asm jednak nie trzeba zmieniać na 3 bajty lea (%ecx, %edx), %eax+ 1 bajt retdla Microsoft __fastcalllub gcc -mregparm.
Peter Cordes,
1
Jest to jednak interesujące wyzwanie dla konwencji wywoływania stosów-argumentów. popma tylko 1 bajt, ale esptryby adresowania względnego wymagają bajtu SIB. Tak więc konwencja wywoływania wywołującego może pop %ecx(adres zwrotny), pop %eax/ pop %edx/ add %edx, %eax(2 bajty) / jmp *%ecx(2 bajty) = łącznie 7 bajtów. vs. mov 4(%esp), %eax(4B) / add 8(%esp), %eax(4B) / ret= 9 bajtów lub 11 bajtów dla wersji wywołującej wywołującej to użycie ret imm16, jeśli zrobiłem to dobrze. Jest to dodatkowy 1 bajt dla SIB z ESP jako bazą i dodatkowy 1 bajt dla disp8 w każdej insn.
Peter Cordes,