두 숫자 추가


44

입력 : 두 정수. 바람직하게는 십진 정수이지만, 다른 형태의 숫자가 사용될 수있다. 이들은 표준 입력의 코드, 프로그램 또는 함수의 인수 또는 목록으로 제공 될 수 있습니다.

결과 : 그들의 합. 출력 정수에 입력 정수와 동일한 형식을 사용하십시오. 예를 들어, 입력 5 16은 출력으로 이어 21집니다.

제한 사항 : 표준 허점은 없습니다. 이것은 이며 가장 적은 양의 바이트로 응답합니다.

참고 사항 : 이것은 매우 사소한 것이지만 구현 방법에 관심이 있습니다. 답은 완전한 프로그램 또는 기능 일 수 있지만, 어떤 프로그램인지 식별하십시오.

테스트 사례 :

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

또는 CSV로 :

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

리더 보드


26
이것은 매우 사소하지만 Hello World 카탈로그와 같이 단순하지는 않습니다. 정수를 추가하는 기능이 프로그래밍 언어에 대한 두 가지 요구 사항 중 하나이므로 적절하게 지정하면 가치가 있다고 말합니다.
Dennis

1
대답은 기본값으로 앞에 0을 입력 할 수 있습니까? 예를 들어 다음 5 16과 같이 입력 됨005 016
FinW

@FinW는 물론이다. 그들이 8 진수로 해석되지 않는 한.
dkudriavtsev

답변:



66

마인 크래프트 1.10, 221 자 (비경쟁)

이것이 Minecraft 맵을 만들 때 다루어야 할 사항입니다.

따로 : Minecraft에서는 문자열 입력을 할 수있는 방법이 없으므로 프로그램 자체에 숫자를 입력하여 약간의 부정 행위를합니다. (Lorgon111의 Minecraft Bingo와 같은 아주 적은지도는 숫자를 입력하기 위해 명령을 복사하여 채팅에 붙여 넣어야하기 때문에 다소 정당합니다.)

블록 레이블 MCEdit 필터에 대해 abrightmoore에게 감사합니다 .

에이

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

입력의 어려움으로 인해 비 경쟁적 이며이 일에서 바이트 수를 계산하는 방법을 모릅니다 (블 라이트 시스템에는 명령 블록에 결함이 있음).


4
이것은 지금까지 최고입니다. 놀랄 만한.
dkudriavtsev

입력 하드 코딩이 유효하다고 생각하지 않지만 Minecraft의 명령 블록에 대해 충분하지 않아 하드 코딩 이외의 입력을 취할 수있는 방법이 있는지 판단 할 수 없습니다. 아마도 우리의 마인 크래프트 전문가 중 한 명이 무게를 could 수 있습니다.
Mego

3
예, MC에 "이 명령을 복사하여 붙여 넣기"외에 텍스트 입력이 없습니다. 숫자 키패드는 / tellraw로 가능하지만 / tellraw의 외설스러운 엄격한 구문 덕분에 500kb는 말할 것도없고 거의 모든 골프를 사용할 수 있습니다. 돼지 + 소 또는 붉은 양모 + 파란색 양모와 같은 세계의 무언가를 계산하는 대안이 될 것입니다.
quat

1
@quat 우리는 보통 마인 크래프트에서 물건을 계산하기 위해 호퍼를 사용하기 때문에 갈 길이라고 생각합니다. 이를 처리하는 다른 방법은 레버를 사용하여 순수한 레드 스톤에서도 가능합니다. 우리는 아무런 제한이 없으며 비트는 마인 크래프트에서 도달 할 수있는 가장 큰 자연 가치이므로 간단히 2 비트의 출력으로 2 비트를 추가합니다 (가능성 : 0,1,2. 다른 솔루션은 2 바이트를 사용하고 9 와이어에서 출력하지만 훨씬 덜 골프 것입니다.
Katenkyo


39

이진 람다 미적분 , 4.125 바이트

교회 숫자 로 입력 및 출력 .

00000000 01011111 01100101 11101101 0

에서는 람다 계산법 , 이는 λ이고 m . λ n . λ F . λ x . m f ( n f x ).

브루나이 지수 : λ λ λ λ 4 2 (3 2 1)


Lambda 미적분학 은 매핑 (함수)을 설명하는 간결한 방법입니다.

예를 들어이 작업은 λ x 로 쓸 수 있습니다 . λ y . x + y

주목할 것은 이것이 두 개의 인수를 취하는 람다 (함수)가 아니라는 것입니다. 이것은 실제로 중첩 된 람다입니다. 그러나 두 가지 인수를 취하는 람다처럼 작동하므로 비공식적으로 설명 할 수 있습니다. 모든 람다는 공식적으로 하나의 주장 만 취합니다.

예를 들어이 람다를 3과 4에 적용하면

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

따라서 첫 번째 람다는 실제로 다른 람다를 반환합니다.


교회 숫자 는 람다 기호와 변수 만 남기고 여분의 부호를 없애는 방법입니다.

교회 시스템의 각 숫자는 실제로 함수가 항목에 적용되는 횟수를 지정하는 람다입니다.

함수를 f 로하고 항목을 x로 합니다.

따라서 숫자 1은 λ f에 해당합니다 . λ x . f xfx에 정확히 한 번 적용 함을 의미합니다 .

예를 들어 숫자 3은 λ f 입니다. λ x . f ( f ( f x )), 즉 fx에 정확히 세 번 적용한다는 의미 입니다.


따라서 두 개의 교회 숫자 (예 : mn ) 를 더하려면 xm , nf 를 적용하는 것과 같습니다 .

이것은 처음에 fxn 번 적용한 다음 f 를 결과 항목 m에 적용하는 것과 같습니다 .

예를 들어, 2는 의미 f(f(x))도 3은 의미 f(f(f(x)))하므로, 2 + 3이 될 것이다 f(f(f(f(f(x))))).

적용하려면 FX , N 번, 우리는이 N F X .

비공식적으로 두 인수를 취하는 함수로 mn 을 볼 수 있습니다 .

그 후, 우리는 적용 f를 본 결과 항목, 다시 시간 : m의 F ( N F (X) ).

그런 다음 상용구를 다시 추가하여 λ m 을 얻습니다 . λ n . λ F . λ x . m f ( n f x ).


이제 이것을 De Bruijn index 로 변환해야합니다 .

먼저, 각 변수와 람다 선언 사이의 "상대 거리"를 계산합니다. 예를 들어, m 은 4 개의 람다 "ago"로 선언되기 때문에 거리는 4입니다. 마찬가지로, n 의 거리는 3이고, f 의 거리는 2이며, x 의 거리는 1입니다.

그래서 우리는 이것을 중간 형식으로 작성합니다 : λ m . λ n . λ F . λ x . 4 2 (3 2 1)

그런 다음 변수 선언을 제거하고 다음과 같이 남겨 둡니다. λ λ λ λ 4 2 (3 2 1)


이제 이진 람다 미적분으로 변환합니다 .

규칙은 다음과 같습니다.

  • λ가됩니다 00.
  • m n (그룹화)가됩니다 01 m n.
  • 숫자 i1 i 곱하기 + 가되고 0, 예를 들어 4가됩니다 11110.

λ λ λ λ 4 2 (3 2 1)

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

≡ λ λ λ λ 11110 110 0101 111011010

≡ λ λ λ λ 0101 111101100101111011010

00 00 00 00 0101 111101100101 111011010

000000000101111101100101111011010


18
인터프리터 / 컴파일러에 전달한 4.125 바이트 소스 파일을보고 싶습니다.
마틴 엔더

8
@MartinEnder 여기모든 대답 을 들려 주세요 .
Leaky Nun

5
0.875 바이트 솔루션을보고 싶습니다.
Mr Lister

3
메타 합의에 의해 , 프로그램이 소수의 바이트를 가진 파일로 저장 될 수 없다면, 반올림해야합니다.
Pavel

24

공통 리스프, 15 바이트

(+(read)(read))

2
프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다!
Dennis

CLisp에 익숙하지 않지만 공백을 제거 할 수 있습니까? (+(read)(read))
Mego

@ Mego 당신이 맞아요, 가능합니다. Common Lisp를 처음 사용하기 때문에 정보를 주셔서 감사합니다. 소스를 편집했습니다.
Byeonggon Lee

3
우리 둘 다 여기서 뭔가를 배운 것 같아요! PPCG에 오신 것을 환영합니다!
Mego

21

스택 고양이 , 8 + 4 = 12 바이트

]_:]_!<X

-mn플래그로 실행하십시오 . 온라인으로 사용해보십시오!

스택 고양이의 골프는 매우 짐승이 강제 몇 일 발견 된이 프로그램 위 있도록 직관적. 비교를 위해 *(...)>템플릿을 사용하는보다 직관적이고 사람이 작성한 솔루션 은 2 바이트 더 깁니다.

*(>-_:[:)>

-ln대신 플래그 와 함께 (설명은이 게시물의 하단을 참조하십시오).

설명

스택 고양이에 대한 입문서는 다음과 같습니다.

  • Stack Cats는 스 니펫의 미러가 원래 스 니펫의 효과를 취소하는 뒤집을 수있는 난해한 언어입니다. 프로그램은 또한 그 자체의 거울상이어야합니다. 필연적으로 이것은 짝수 길이의 프로그램이 no-ops 또는 무한 루프이고 모든 사소한 종료 프로그램의 길이가 홀수임을 의미합니다 (그리고 본질적으로 중앙 운영자의 활용 임).
  • 프로그램의 절반은 항상 암시되므로 절반은 -m또는 -l플래그 와 함께 생략 될 수 있습니다 . 여기서 -m플래그가 사용되므로 위의 반 프로그램은 실제로로 확장됩니다 ]_:]_!<X>!_[:_[.
  • 이름에서 알 수 있듯이 Stack Cats는 스택을 기반으로하며 스택은 0으로 끝이 없습니다 (즉, 빈 스택에 대한 작업은 0을 반환 함). 스택 고양이는 실제로 예를 들어 스택의 테이프를 사용 <하고 >바로 각각 왼쪽 하나 스택과 하나의 스택을 이동합니다.
  • 스택 맨 아래의 0은 삼키거나 제거됩니다.
  • 모든 입력은 초기 입력 스택으로 푸시되며 첫 번째 입력은 상단에, 추가 입력은 마지막 입력보다 -1입니다. 출력은 현재 스택의 내용을 사용하여 마지막에 수행됩니다 (하단에 옵션 -1은 무시 됨). -n숫자 I / O를 나타냅니다.

다음은 확장 된 전체 프로그램의 흔적입니다 ]_:]_!<X>!_[:_[.

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

a+b그런 다음 밑이 -1 인 채로 출력됩니다. 참고이 솔루션에 대해 가장 까다로운 부분은 출력 스택은이 있어야한다는 것을 -1, 아래에, 그렇지 않으면 단지의 출력 스택이 [-1]기본 -1 무시하는 것, 그리고 출력 스택이 [0]제로가 삼킬 수있는베이스 (그러나 출력을 야기 [2]예를 들어, 스택은 2정상적으로 출력됩니다 ).


재미를 위해, 동일한 길이의 관련 솔루션의 전체 목록이 있습니다 (목록이 완전하지 않을 수 있음).

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

*(>-_:[:)>솔루션은 더 이상이지만, 그것은 사용하기 때문에 쓰기보다 직관적 인 *(...)>템플릿을. 이 템플릿 <(...)*(...)>-l플래그 와 함께 사용될 때 확장됩니다 .

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

따라서 *(...)>템플릿은 첫 번째 루프는 건너 뛰지 만 두 번째 루프는 실행됨을 의미합니다. 이것은 프로그램의 다른 절반에서 루프의 영향에 대해 걱정할 필요가 없기 때문에보다 간단한 프로그래밍이 가능합니다.

이 경우 루프 내부는 다음과 같습니다.

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

>그런 다음 템플릿 의 최종 은 우리를 다시 입력 스택으로 이동 a+b시킵니다.


19

Brain-flak , 6 바이트

({}{})

온라인으로 사용해보십시오!

Brain-flak는 두 가지 주요 제한 사항이있는 정말 흥미로운 언어입니다.

  1. 유일하게 유효한 문자는 대괄호입니다 (예 : 다음 문자).

    (){}[]<>
    
  2. 모든 단일 대괄호 세트가 완전히 일치해야합니다. 그렇지 않으면 프로그램이 유효하지 않습니다.

그들 사이에 아무것도없는 괄호 세트를 "나일 라드"라고합니다. nilad는 특정 숫자 값을 생성하고 서로 옆에있는 모든 nilad가 합산됩니다. 그들 사이에 무언가가있는 대괄호 세트를 "모나드"라고합니다. 모나드는 숫자 인수를 취하는 함수입니다. 따라서 모나드 내부의 괄호가 평가되며 모나드에 대한 인수입니다. 보다 구체적인 예는 다음과 같습니다.

() nilad는 다음과 같은 뇌 방탄 코드 그래서 1과 같다 :

()()()

3으로 평가됩니다. () 모나드 는 그 안의 값을 전역 스택으로 푸시합니다. 그래서 다음

(()()())

3. 다음은 푸시 {}nilad 스택의 꼭대기 값을 팝. 연속 nilad가 항상 추가되므로 문자열은 {}스택의 모든 최상위 요소를 합산합니다. 따라서 내 코드는 본질적으로 다음과 같습니다.

push(pop() + pop())

15

마인 크래프트의 1.10.x, 924 512 바이트

blytecount를 48 포인트 줄이고 바이트 수412 로 줄인 @ quat 덕분 입니다.

자, 나는 이 답변 에서 아이디어 중 일부를 가져 와서 음수가 아닌 입력을 받아 들일 수 있다는 것을 제외하고는 내 자신의 버전을 만들었습니다. 버전은 여기서 구조 블록 형식 으로 찾을 수 있습니다 .

그룹

(새로운 버전은 좀 지루한 Tbh로 보입니다)

다른 답변과 비슷한 명령 :

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

숫자를 입력하려면 여러 소와 돼지를 스폰하십시오. 소는 값 "n"을 나타내고 돼지는 값 "m"을 나타냅니다. 명령 블록 시스템은 소와 돼지를 점진적으로 죽이고 필요에 따라 값을 할당합니다.

이 답변은 귀하가 자연적으로 발생하는 젖소 또는 돼지가없는 세계에 있고 "n"및 "m"에 저장된 값이 각 실행에서 지워진다 고 가정합니다.


음의 정수의 경우 다른 두 종류의 동물을 "음수"로 사용할 수 있습니다. 예를 들어 5 마리의 말은 -5를 나타낼 수 있습니다.
Mego

@Mego 그러면 2가 아닌 4 개의 입력이됩니다.
Addison Crump

여전히 두 개의 입력이 될 것입니다-음수에 2의 보수를 사용하는 것과 같습니다. 약간 다른 형식이지만 여전히 하나의 입력입니다. 적어도 그것은 2 센트입니다.
Mego

을 사용하여 블록을 절약 할 수 execute @e[type=Pig] ~ ~ ~ scoreboard players add m a 1있으므로 시계 형식이 필요하지 않습니다.
quat

@quat 우 좋은.
애디슨 크럼프

14

레티 나 , 42 바이트

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

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

온라인으로 사용해보십시오!

설명

단항식에서 숫자를 추가하는 것이 세상에서 가장 쉬운 방법이지만 음수를 입력하면 문제가 발생합니다.

\d+
$*

우리는 숫자를 단항으로 변환하는 것으로 시작합니다. 각 번호를에 일치 \d+시키고로 바꾸면됩니다 $*. 이것은 Retina 고유의 ​​대체 기능입니다. 전체 구문은의 복사본을 count$*character삽입합니다 . 이들 모두는 어디에서 생략 할 수 기본값 (즉, 경기 자체)와 기본값으로 . 따라서 각 입력에 대해 입력 을 받고 공간 분리기와 잠재적으로 빼기 부호가 있습니다. 예를 들어 입력 은 다음을 제공합니다.countcharactercount$&character1nn8 -5

11111111 -11111

이제 음수를 처리하려면 별도의 -1숫자 를 사용하는 것이 가장 쉽습니다 . 우리는 -그 목적을 위해 사용할 것입니다.

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

이 단계는 두 가지 일을합니다. 공백, 선행 빼기 부호를 제거 1하고 빼기 부호 뒤 의 s를 -자신 으로 바꿉니다 . 이것은 일치 |-1+하거나 (즉, 공백 또는 음수) 음역을 수행하여 수행됩니다. 음역은에서 1p로 이동 -_하지만 여기서는 p인쇄 가능한 모든 ASCII 문자로 확장되며 _삭제를 의미합니다. 따라서 1해당 경기에서 s가 s로 바뀌고 -마이너스와 공백이 제거됩니다. 우리의 예는 이제 다음과 같습니다 :

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

이 단계에서는 입력에 양수 하나와 음수 하나가있는 경우를 처리합니다. 그렇다면 문자열에 1s와 -s가 있으며 취소하고 싶습니다. 이것은 두 문자를 단어 경계와 일치시키고 ( 1단어는 단어 문자로 간주되고 -그렇지 않기 때문에) 일치하지 않는 것으로 대체하여 수행됩니다. +문자열이 변경 멈출 때까지 지시합니다 망막 반복적으로이 작업을 수행합니다.

이제 우리는 남아있는 유일한 1 s 또는 전용 - 이야.

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

이것을 다시 십진수로 변환하기 위해 전체 입력을 일치 시키지만 가능 -하면 그룹으로 캡처합니다 1. 그룹을 다시 작성하고 1(a -를 음수 앞에 추가 ), 일치하는 길이를 $.&(Retina 특정 대체 기능)으로 다시 작성합니다.


2
이것은 매우 영리합니다.
Mego

rangeRetina 에서 구현하는 쉬운 방법이 있다면 . 나는 몇 번 시도했지만 부정적인 것은 고통입니다.
mbomb007

이 언어로 두 개의 숫자를 추가하는 데 40 바이트 이상 이 걸립 니까?
dkudriavtsev

2
@DmitryKudriavtsev 잘, 레티 나 숫자의 개념이 없습니다 ...
마틴 엔더

@DmitryKudriavtsev, 그리고 그것은 단지 정수입니다 ....
msh210

14

도미노 , 38,000 바이트 또는 37 개의 타일

이것은 테이블 탑 시뮬레이터 에서 생성됩니다 . 여기 비디오파일이 있습니다. 표준 반가산기이며, 자리 값에 대한 게이트 와 자리 값 에 대한 and게이트 로 구성 됩니다.2^1xor2^0

여기에 이미지 설명을 입력하십시오

세부

  • I / O
    • 시작 -명확성을 위해 포함되며 (총계로 계산되지 않음) 기능을 '호출'또는 '실행'합니다. 입력에 [Yellow] 가 주어진 후 '눌려 져야' 합니다.
    • 입력 A- 명확성을 위해 포함되며 (총계로 계산되지 않음) [녹색]에1 대해 a를 누르거나 누르지 않도록 '눌려집니다 .0
    • 입력 B- 명확성을 위해 포함되며 (총계로 계산되지 않음) ' 파란색 '을 나타 내기 위해 '누르고' 10 [파란색] 입니다.
    • 출력 -총계로 계산됩니다. 이 도미노는 합계를 선언합니다. 왼쪽은 2^1오른쪽은 2^0 [Black] 입니다.
  • 누르면
    • 입력하거나 체인을 시작하려면 금속 대리석을 스폰하십시오.
    • 리프트 강도를 100%
    • 원하는 도미노 위에서 대리석을 들어 올리십시오.
    • 대리석을 떨어 뜨려 라

1
... 어떻게?
dkudriavtsev

4
@Mendeleev 일단 이진 논리 게이트 가 있으면 다른 모든 것은 xD에 빠진다.
NonlinearFruit

10

하스켈, 3 바이트

(+)

괄호는 접두사 함수 여야하기 때문에 여기에 있습니다. 이것은 + 함수의 섹션을 취하는 것과 동일하지만 인수가 적용되지 않습니다. 또한 제대로 구현 된 Vector, Matricies, Complex number, Floats, Doubles, Rationals 및 Integer와 같은 다양한 유형에서 작동합니다.

이것이 하스켈이기 때문에 다음은 유형 수준에서 수행하는 방법입니다. 런타임 대신 컴파일 타임에 수행됩니다.

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

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

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

Haskell Wiki 에서 채택한 코드


3
재미있는 사실 : 이것은 체다와 함께
폴리 글롯입니다

10

Mathematica, 4 2 바이트

Tr

크로스 아웃 4 는 여전히 정규 4입니다. Tr 1 차원 목록에 적용하면 해당 목록 요소의 합이 취해집니다.


9

dc, 2 바이트

+f

스택에 상위 2 개 항목을 추가 stdin한 다음 (이전에서 가져온 ) 스택의 내용을에 덤프합니다 stdout.

편집 : 추가 고려시 원하는 I / O 동작에 따라 여러 가지 방법이 구현 될 수 있습니다.

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

합계에 대한 가장 완벽한 형태는 다음과 같습니다.

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

기다림! 같은 줄에 공백으로 구분 된 두 개의 숫자를 사용할 수 있습니다! 이것은 우리에게 :

?+p

첫 번째 예제를 사용하는 방법을 볼 수 없습니다 . 여기 +f에서 dc -e "?+p"작동합니다.
Jasen

1
@Jasen +f스택에 (정확히 두 개) 숫자를 입력 한 경우 버전이 작동합니다. 나는 dcI / O가 std(in|out)스택인지 또는 스택 인지 알지 못했습니다 . 돌이켜 보면, 그것은 게시물의 맨 위에 놓는 가장 합리적인 옵션이었습니다. : /
Joe

규칙은 내가 말할 수있는 한 스택은 괜찮다고 말합니다.
Jasen

9

셰익스피어 프로그래밍 언어 , 155152 바이트

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

언 골프 드 :

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]

내가 사용하고 drsam94의 SPL 컴파일러를 이 컴파일. 테스트하려면 :

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

8

Brachylog , 2 바이트

+.

두 숫자가 입력 된 목록이 필요합니다

또는 다음에 대한 답변을 원할 경우 STDOUT:

+w


7

PHP, 20 바이트

놀랍게도 이번에는 짧습니다 :

<?=array_sum($argv);

다음과 같이 명령 행에서 실행합니다.

$ php sum.php 1 2

귀하의 스크립트도 받아들이 php sum.php 1 2 3 4 5 6므로 100 % 확실하지 않습니다.
timmyRS

@timmyRS 제출은 두 가지 정수인 특정 입력 형식으로 작동해야합니다. 다른 입력도 처리해야한다고 생각하지 않습니다.
insertusername 여기

소스 파일 이름이 숫자로 시작하면 어떻게 되나요? :)
Alex Howansky

@AlexHowansky Psssssssst – 아무에게도 말하지 마십시오. ;) 이것은 파일에서 실행할 때의 문제입니다. 여전히 -r플래그를 사용하여 실행할 수 있습니다. 그러면 더 이상 문제가되지 않습니다.
insertusername 여기

7

체다, 3 바이트

(+)

이것은 "기능화 된 연산자"라는 Cheddar의 멋진 기능입니다. 이 아이디어의 대가는 @ CᴏɴᴏʀO'Bʀɪᴇɴ입니다.

기능화 된 연산자의 예는 다음과 같습니다.

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


6

형상 대시-15 개의 객체

마지막으로 완료되었습니다.
15 개의 객체는 그리 많지는 않지만 (특히 음수로 인해) 여전히 악몽이었습니다.

여기에 이미지 설명을 입력하십시오

이것을 재현하는 방법을 위해 여기에 15 개의 이미지를 삽입해야했기 때문에 레벨을 업로드했습니다. 레벨 ID는 5216804입니다. 설명은 실행 방법을 알려주며 복사 가능하므로 복사 할 수 있습니다.

설명:

왼쪽 상단 트리거 (Instant Count 2)는 첫 번째 추가 항목이 0인지 확인한 다음 두 번째 추가 항목이 양수인지 음수인지 확인합니다. 양수이면 두 번째 덧셈의 값을 합 (루프를 사용하는 BF 스타일)으로 옮겼으며 음수이면 같은 일을합니다.

두 번째 덧셈이 양수인지 음수인지 확인해야하는 이유는 두 번째 덧셈에서 하나를 빼고 합계에 하나를 더하거나 두 번째 덧셈에 하나를 더하고 합계에서 하나씩 빼야하기 때문입니다.

첫 번째 부록이 0이 아닌 경우 위의 프로세스를 사용하여 양수인지 음수인지 테스트합니다. while 루프에서 한 번 반복 한 후 첫 번째 추가가 0인지 여부를 테스트하고, 추가 된 경우 설명의 시작 부분에 설명 된 프로세스를 수행합니다.

Geometry Dash는 BF와 매우 유사하기 때문에 BF 솔루션을 만들 수 있습니다.



5

Perl 5.10, 8 바이트

추가 할 두 개의 숫자는이 두 개의 행에 있어야합니다.

say<>+<>

이걸 사용해보십시오.

하나는 동일한 줄에 입력 된 것 입니다 ( -a 플래그의 경우 14 + 1 바이트 ).

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

여기 사용해보십시오!

하나는 동일한 줄에 입력 된 것 입니다 ( -a 플래그의 경우 19 + 1 바이트 ).

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

이걸 사용해보십시오.

다른 하나는 배열 기본 구분 기호를 변경하여 ( -a 플래그의 경우 19 + 1 바이트 )

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

이걸 사용해보십시오!


2
또 다른 좋은 예 (카탈로그 챌린지가되는 경우)는이 게시물에서 Dennis가 설명한 방법입니다 : codegolf.stackexchange.com/q/32884 (ab) -p깃발을 사용합니다 .
Dom Hastings

대신에 (딸기 5.20.2에서 테스트 say$F[0]+$F[1]) say pop()+pop작동 -E하고 바이트를 절약합니다.
msh210



5

PowerShell v2 +, 17 바이트

$args-join'+'|iex

입력을 두 개의 개별 명령 행 인수로 가져옵니다.이 인수는 특수 배열에 미리 채워집니다 $args. -join연산자를 사용하여 문자열을 +중간에 연결 한 다음 문자열을 Invoke-Expression(와 유사하게 eval) 파이프합니다 .


최소한의 프로그램을 다룰 때 동일한 바이트 수로 입력을 취하는 여러 가지 방법이 있음을 상기시켜 준 @DarthTwon에게 감사드립니다.

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

PowerShell은 융통성이 없다면 아무 것도 아닙니다.


1
그래, 난 그냥 당신을 스토킹 해요 : P 대체 답변 : $args[0]+$args[1]그리고param($a,$b)$a+$b
ThePoShWolf

5

> <> , 7 6 3 바이트

+n;

온라인 통역사

또는 -v 플래그를 사용하여 TIO에서 시도하십시오.

온라인으로 사용해보십시오


질문은 함수를 정의 할 수 있기 때문에 간단한 +것으로 충분 하다고 생각합니다 . 스택에서 두 숫자를 표시하고 추가 결과를 스택에 다시 넣습니다. -v함수 호출 전에 숫자를 읽는 것이 가능했기 때문에 비용 도 피할 수 있습니다.
Aaron

1
@ 아론 : 맞습니다. 그러나 그 솔루션은 이미 여러 다른 언어로 게시되어 있으므로 이것을 전체 프로그램으로 유지하겠습니다.
Emigna

1
나는 v 플래그가 최대 +1 바이트 일 것이라고 생각했지만 fishlanguage.com 인터프리터를 사용할 수 있으며 총 바이트는 3 바이트 (-v가 필요하지 않음)입니다.
redstarcoder

@redstarcoder : 모든 사람은 항상 플래그를 물고기의 3 바이트 (및 다른 모든 언어의 경우 1 바이트)로 지정합니다. 왜 다른지 잘 모르겠지만 유효한 이유라고 생각합니다.
Emigna

어쨌든 fishlanguage.com 인터프리터 만 사용하면 플래그가 필요하지 않습니다. 메타 링크가 있습니까? 초기 스택에서 정수를 사용하기 위해> <> 프로그램이 바이트를 추가하는 것을 보지 못했습니다 (나도했습니다).
redstarcoder

5

C, 35 바이트

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

여기서 내가 한 것은 부울 또는 산술 연산자를 사용하지 않고 추가를 정의한 것입니다. 이것은 재귀 적으로 x를 'xor'에 의해 합계 비트로 만들고 y를 캐리가 없을 때까지 'and'로 캐리 비트를 만듭니다. ungolfed 버전은 다음과 같습니다.

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

왜 직접 추가하지 않습니까?
Esolanging Fruit

나는 지루한 것으로, 완전 골프 버전은 사소한 것으로 나타났습니다.
Bijan

"모든 답변은 더 나은 점수에 도달하기 위해 약간의 노력을 보여 주어야합니다. 예를 들어, 코드 골프 도전에 대한 답변은 가능한 한 짧게 (선택한 언어의 제약 내에서) 시도해야합니다." ( codegolf.meta.stackexchange.com/a/7073/61384에서 )
Esolanging Fruit

2
분명히 나는 ​​단지 숫자를 더하는 것을 생각했고, 대체 구속 조건 하에서 만 더 짧게 만들기 위해 노력했습니다. 나는 이것이 틀에 얽매이지 않는 질문이기 때문에 틀에 얽매이지 않은 대답이 필요하다고 생각합니다. 단어에 대한 규칙 단어 다음에 누군가가 이미 짧은 단어를 썼다면 대답을 할 이유가 없습니다. 20 바이트 파이썬 솔루션을 넣고 누군가 4 바이트 버전을 이미 가지고 있다면 복사하여 붙여 넣는 방법을 모른다는 것을 증명합니다. 독창성을 중시하기 때문에 사람들은 20 바이트 솔루션을 사용합니다.
Bijan

1
선택한 언어에서 경쟁력이 있음을 암시합니다 . 그러나 메타를 읽었을 때 귀하의 답변이 유효하지 않다고 주장 할 수없는 것 같습니다 ( "골퍼 알고리즘이 존재하더라도 답변이 알고리즘을 구현할 수 있습니다").
Esolanging Fruit

4

MATLAB, 4 바이트

@LeakyNun으로 인해 1 바이트가 제거되었습니다.

@sum

이것은 배열을 가져와 합계를 제공하는 익명 함수입니다. 사용 예 :

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

무엇에 대해 sum?
Leaky Nun

@LeakyNun 감사합니다, 좋은 생각입니다!
루이스 멘도

43 바이트? BTW XD : 나는 우리가 가지고있는 생각 전체 프로그램 또는 기능을 난 단지 말하고 싶지만, 그래서 @sum유효한 대답이다. 아니면 또 다른 메타 합의가 있습니까?
flawr

@flawr 나는 있다고 생각합니다. 그러나 나는 그것을 찾을 수 없었다
Luis Mendo

4
Wooah, XD를 43 바이트에서 4 바이트로 줄
였습니다.

4

GoLScript , 1 바이트 (비경쟁)

K

스택에 상위 2 개의 숫자를 더합니다. 그게 다야.

이제 그들을 밀어하는 방법 스택에, 나는 단서가 없다. 나는 그것이 가능하지 않다고 생각합니다 .. cough @ CᴏɴᴏʀO'Bʀɪᴇɴ cough


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

Game of Life 언어의 경우 +1
HighRadioactive

4

셰익스피어 프로그래밍 언어 (SPL), 137135 바이트

완벽한 프로그램, 골프 :

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

간단한 설명 :

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

나는 이것이 그것이 갈 수있는 가장 짧은 것이 확실하지 않습니다. 자세한 내용은 공식 페이지를 확인하십시오.

편집 1 : 제거 :Act IScene I는 로마 숫자는 무시됩니다, 따라서 2 바이트를 저장하는 모든 것이 보인다.


5
유효하지 않습니다. 캐릭터는 셰익스피어의 연극에서 나와야하고 : s가 있어야합니다. 또한 설명을 위해 각 문자 이름 뒤에 쉼표가 필요합니다.
Oliver Ni

4

x86_32 기계 코드, 2 바이트

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

두 값이 이미 ecx 및 eax 레지스터에 있다고 가정하면 add 명령을 수행하면 두 레지스터의 값이 추가되고 결과가 대상 레지스터에 저장됩니다.

C로 작성된 전체 프로그램과 인라인 어셈블리는 여기 에서 볼 수 있습니다 . C로 랩퍼를 작성하면 입력을 제공하고 테스트하기가 쉬워 지지만 실제 추가 기능은이 2 바이트로 줄어들 수 있습니다.


3
이것은 함수가 아니라 스 니펫입니다. ret명령도 필요합니다 (1 바이트). 그리고 그것은 eaxarg-passing 레지스터로 사용되는 사용자 정의 호출 규칙을 가정합니다 . (Irvine32 asm 교육 라이브러리는 그렇게하지만 반환 값 레지스터 r0가 첫 번째 arg-passing 레지스터 인 ARM과 달리 x86-32 또는 x86-64에 대한 표준 호출 규칙은 그렇게하지 않습니다 .) 사용자 정의 호출 규칙은 괜찮습니다. asm 함수이므로 Microsoft 또는 gcc의 경우 3 바이트 lea (%ecx, %edx), %eax+ 1 바이트 로 변경할 필요가 없습니다.ret__fastcall-mregparm .
Peter Cordes

1
그러나 스택 인수 호출 규칙에는 흥미로운 과제입니다. pop은 1 바이트이지만 esp상대 주소 지정 모드에는 SIB 바이트가 필요합니다. 따라서 발신자 팝 호출 규칙은 pop %ecx(반환 주소), pop %eax/ pop %edx/ add %edx, %eax(2 바이트) / jmp *%ecx(2 바이트) = 총 7 바이트입니다. vs. mov 4(%esp), %eax(4B) / add 8(%esp), %eax(4B) / ret= 9 바이트, 또는 ret imm16내가 사용하는 발신자 팝 버전의 경우 11 바이트 . ESP를 기본으로 사용하는 SIB의 경우 추가 1 바이트이고 각 기능의 disp8의 경우 1 바이트입니다.
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.