소스를 두 배로 늘리면 출력이 두 배가됩니다!


127

작업을 수락하려면 양의 정수 (0보다 큰)를 출력하는 프로그램을 작성해야합니다. 까다로운 부분은 소스 코드를 복제하면 출력이 원래 정수의 두 배가되어야한다는 것입니다.

규칙

  • 당신은 전체 프로그램을 구축해야합니다 . 즉, 출력은 STDOUT으로 인쇄되어야합니다.

  • 초기 소스는 1 바이트 이상이어야합니다.

  • 두 정수는 모두 밑이 10이어야합니다 (다른 염기 나 과학적 표기법으로 출력하는 것은 금지됨).

  • 프로그램은 입력을 받지 않아야합니다 (또는 사용되지 않은 비어있는 입력이 없어야 함 ).

  • 후행 / 선행 공백이있는 정수를 출력 할 수 있습니다.

  • 당신은 당신의 소스의 복사본 사이에 개행을 가정 할 수 없습니다.

  • 이것은 이므로 각 언어에서 가장 짧은 (원본) 코드 승리합니다!

  • 기본 허점이 적용됩니다.

소스 코드가 ABC있고 해당 출력이 4입니다. ABCABC대신 쓰고 작성 하면 출력은이어야합니다 8.

리더 보드

이것은 @ manatwork 's layout을 사용합니다 .


2
@ Mr.Xcoder 그렇다면 내 소스에 하나만 포함하면됩니다.
steenbergh

3
@ Mr.Xcoder 나는 당신이 당신의 자신의 소스 코드를 읽지 못했을 것이라고 생각합니다.
caird coinheringaahing

1
한 번번만 작동하면 됩니까? 우리는 n 개의 많은 배가 를 지원할 필요가 없습니까?
코디 그레이

6
@Daniel 소스가``(빈 프로그램)이며 생산한다고 가정 해 봅시다 5. 두 배로 늘리면 소스는``(빈 프로그램)이며 5수행하는 작업에 관계없이 생성 됩니다. 즉, 빈 프로그램 복제는 여전히 빈 프로그램이며 빈 프로그램이 다른 것을 의미하는 경우 (예 : 난수 생성기)를 제외하고는 항상 동일한 출력을 생성하지만 어쨌든 유효하지 않습니다.
Mr. Xcoder

1
프로그램 종료시 스택 상단을 자동으로 덤프하는 esolang에게는 어려운 일이 아닙니다.
MD XF

답변:


152

파이썬 2 , 33 바이트

print len(open(__file__).read())#

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

두배로 해봐

파이썬 3 , 28 바이트

print(len(*open(__file__)))#

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

두배로 해봐

설명

이것은 사용하여 소스 코드를 열어 open(__file__)및 사용하여 길이를 가져옵니다 읽을되는 것을 방지에게 추가 코드를. 소스가 두 배가되면 길이도 늘어납니다.len#


28
와우, 나는 기절했다 ... 너무 훌륭하다!
Mr. Xcoder

2
32 바이트 . 추가 모드를 사용하여 현재 위치를 파일 끝으로 설정하여 작동합니다. tell()는 파일의 현재 위치를 반환합니다
Halvard Hummel

@HalvardHummel 니스. 그러나이 답변을 업데이트 할 의도는 없습니다. 직접 게시하고 싶다면 제 의견으로는 크게 다릅니다.
Sriotchilism O'Zaic

@WheatWizard 이해할 수있는, 나는 별도의 답변을했습니다
Halvard Hummel

96

젤리 , 1 바이트

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

또는 두 번 시도하십시오!

나는 이것이 어떻게 작동하는지 전혀 모르지만 분명히 그렇게합니다.


55
당신이 무엇을
썼는지

2
대단하다, 나는 단지이 8 분을 너무 늦게 생각했다.
HyperNeutrino

17
모든 링크에는 인수가 필요합니다. 체인의 첫 번째 요소가 nilad이면 결과는 인수가되고 링크는 모나드 방식으로 실행됩니다. 선행 nilad가 없으면 대신 0 이 사용됩니다.
Dennis

65

Google 스프레드 시트, 11 5 바이트

수식을 보유한 셀에 입력 및 출력을받지 않는 익명의 워크 시트 수식

=4/(2

단일 수식으로 이것은 다음과 같은 약간의 호출 스택으로 평가됩니다.

=4/(2
=4/(2)
=4/2
=2
2

그러나이 워크 시트 수식이 두 배가되면이 호출 스택은

=4/(2=4/(2
=4/(2=4/(2)
=4/(2=4/(2))
=4/(2=2)
=4/(True)
=4/True
=4/1
=4
4

물론,이 방법을 사용하는 의미는이 세 번째와 문제의 모든 다음 반복에서, 두 번 이상 반복되면, 호출 스택에 도달하는 것입니다 =4/(2=4)따라서 아래로 평가 =4/0하고 던져 #DIV/0!오류

=DIVIDE(4,2수식 에서 대수로 전환하여 -6 바이트


18
Google 스프레드 시트가 코드 골프에 사용될 것으로 예상 한 적이 없습니다. 영리한 솔루션
hucancode

11
@hucancode 이것에 대해 정말 흥미로운 점은 후행을 제외하면 Excel에서 오류가 발생하기 때문입니다. )이 답변은 내가 보았던 유일한 Google 스프레드 시트 답변으로 Excel 답변으로 변환되지 않습니다.
Taylor Scott

45

05AB1E , 2 바이트

기발한

XO

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

배가

XOXO

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

설명

X1 을 스택으로 푸시 합니다.
O 는 스택을 합산합니다.


48
XOXO, 좋은 해결책.
Mr. Xcoder

4
당신은 당신이 또한 사용할 수 있다는 것을 알고있는 동안 의도적으로 그렇게했습니다 1O!
Outgolfer Erik

12
이 어리석은 언어를 어디에서 찾습니까?
DavidB

7
@DavidB 보통 그들은 씁니다.
Federico Poloni

3
@DavidB 예, 사람들은 codegolf에 대한 언어를 발명 않으며, 예, 그들은 인상적으로 낮은 점수를받을 수 있지만, 허용되지 않습니다 1 바이트에서 그것을 해결하는 공격 후 언어를 발명 같은 어리석은 일을하고, 이러한 언어 프로그래밍은 보통 멀리 에서 쉬운.
Esolanging 과일

43

C (gcc), 37 바이트

i;main(){putchar(i+49);}/*
i=1;//*///

파일에 후행 줄 바꿈이 없습니다.

구문 강조를위한 이중 버전 :

i;main(){putchar(i+49);}/*
i=1;//*///i;main(){putchar(i+49);}/*
i=1;//*///

TIO 링크 : single , double .


3
이것이 어떻게 작동하는지 설명해 주시겠습니까? 주석이 주석 처리되지 않은 이유는 무엇입니까?
phil294

10
소스 코드를 두 배로하면,이 /*에 의해 주석 //다음이 의미하는 i=1주석입니다. 코드의 두 배 버전을 구문 형광펜에 넣었는지 알기가 더 쉽습니다.
musicman523

1
우와, 임시 정의 트릭. 좋은.
aschepler

39

헥사 고니 , 7 바이트

/)!@.).

정기적으로 1을 인쇄 한 다음 2를 두 배로 인쇄합니다.

온라인으로 사용해보십시오! 또는 온라인으로 두 배로 시도하십시오!

확장 버전 :

정규병:

 / )
! @ .
 ) .

배가 :

  / ) !
 @ . ) .
/ ) ! @ .
 ) . . .
  . . .

일반 프로그램은 경로를 따릅니다. /)!.@메모리 가장자리가 증가하고 (모두 0으로 초기화 됨) 숫자 값이 인쇄됩니다. 이중으로 된 프로그램은 다음과 같습니다. /.)/)!@대신 인쇄 전에 가장자리가 두 번 증가합니다.


6
와, 잘 했어 직접 찾은 것 같아요? 6 바이트가 무차별 강제 범위에 있기 때문에 나는 그것을 줄 것이라고 생각했고 실제로 4 바이트 솔루션이 있습니다 [@!)(약 5 570 5 바이트 솔루션). 실제로 직접 솔루션을 찾는 데 어려움을 겪었으므로 4 바이트 솔루션을 게시하게되어 기쁩니다.
마틴 엔더

1
관심이 있으시면 여기에 인쇄 된 번호를 포함한 전체 목록이 있습니다 : pastebin.com/TtRujjA4
Martin Ender


36

Braingolf , 1 바이트

+

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

이제 우리는 이야기하고 있습니다!

출력 20또는 40소스가 두 배일 때.

설명

+ 물론 Braingolf에서 "sum", "add"또는 "plus"연산자이지만, 이진 함수, 모나 딕 함수 및 나일 함수가 있습니다.

스택에 2 개 이상의 항목이 있으면 이분법 적이며 스택의 상위 2 개 항목을 합산합니다.

스택에 항목이 하나만 있으면 모나 딕이며 항목이 두 배가됩니다.

스택에 아이템이 없으면 닐라 스틱이며 20을 밀어냅니다!

왜 20을 밀어 넣습니까? 빈 Braingolf 프로그램은 단순히 개행 문자를 인쇄하기 때문에 개행 문자의 ASCII 값은 10이므로, 나는 닐 라드 +푸시 20을 만들어서 암시 적 개행에서 실제로는 모나드 인 것처럼 보입니다. 모두)

따라서:

+   No input
+   Niladic sum, Push 20
    Implicit output

그리고 두 배가되면 :

++  No input
+   Niladic sum, Push 20
 +  Monadic sum, Double top of stack
    Implicit output

28

하스켈 , 26 18 바이트

main=print$0
 +1--

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

배가 :

main=print$0
 +1--main=print$0
 +1--

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

도전삼중 버전에 대답 하면서이 버전을 찾았습니다 .


주석 남용없는 26 바이트 버전 :

main|n<-1,nmain<-2=print n

온라인으로 사용해보십시오! 인쇄 1합니다.

패턴에서, 식별자는 보호 n로 설정 1하고 nmain2하고 print n인쇄 1.

이중 프로그램 :

main|n<-1,nmain<-2=print nmain|n<-1,nmain<-2=print n

온라인으로 사용해보십시오! 인쇄 2합니다.

첫 번째 패턴 가드에서 다시 n로 설정 1하고 nmain2그러나 인쇄 문이되었다, print nmain그래서 2인쇄됩니다. 패턴 가드의 식별자 선언이 true로 평가되므로 두 번째 패턴 가드에 도달 할 수 없습니다.


23

Mathematica, 5 바이트

(1+1)

출력 2 및 (1 + 1) (1 + 1) 출력 4

물론 (많은 사람들이 요청한대로)

수학, 3 바이트

(2)

1
않는 (2)일을?
geokavel

9
@geokavel 2과 공간은 제대로 작동 +1하지만이 모든 것이 Mathematica의 노트북 환경을 가정한다는 점에 주목해야합니다
Martin Ender

1
당신이 opencloud 티카 샌드 박스에서 실행하는 경우, 하나의 공간이되고 x, 같은 것을 2 출력 2하고 2 2 이된다 2x2 인쇄 4. 당신은 대체 솔루션으로 그것을 추가 할 수 있습니다.
Mr. Xcoder

2
(2)잘 작동합니다.
Mr. Xcoder

6
2 잘 작동합니다.
alephalpha

17

Brain-Flak , 6 바이트

({}())

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

설명

이것이하는 일은 꽤 분명해야합니다. {}스택에서 값을 가져옵니다. 암시 적으로 0부터 시작 하여 값 ()을 추가 (...)하고 값을 푸시합니다. 두 번째 실행에서 스택에 이미 1이 있으므로 두 개를 만들기 위해 다른 1을 추가합니다. 실제로 코드 n시간 을 복사 하면 항상 출력 n됩니다.


17

> <> , 7 6 바이트

청록 펠리칸 덕분에 -1 바이트

\ln;
0

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

설명

나는를 사용 0하지만도 사용할 수 있었다 1- 9, a- f그들은 모두 스택에 단일 값을 밀어 때문이다.

두 배가 아님 :

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (1) onto stack; STACK: [0, 1]
n pops off the top value (1) and prints it; STACK: [0]
; end of execution

배가 :

\ redirects execution down
0 pushes zero onto stack; STACK: [0]
0 pushes zero onto stack; STACK: [0, 0]
  (IP wraps around the bottom)
\ redirects execution right
l pushes stack length (2) onto stack; STACK: [0, 0, 2]
n pops off the top value (2) and prints it; STACK: [0, 0]
; end of execution

5
PPCG에 오신 것을 환영합니다! 이것은 매우 잘 설명 된 설명과 좋은 코드로 훌륭한 첫 번째 대답입니다. 당신은 내 공감대를 받았습니다!
Mr. Xcoder

1
나는이 답변을 보았고 훌륭합니다! 부부에 대한 아주 좋은 개선> <> 답변 (내 것을 포함하여!)-여기 TIO 링크를보십시오; tio.run/##S8sszvj/PyYnz5rLAEL@/w8A- 내가 한 것은 0을 공백으로 옮기고 1 바이트를 절약하는 것입니다. :)
청록 펠리컨

1
@Tealpelican 감사합니다! 나는 그렇게 간단한 개선을 놓쳤다는 것을 믿을 수 없다. (실제로 할 수 있지만, >>를 많이 사용하지 않고 골프를 처음 접합니다!) 솔직히 말해서 다른 솔루션을 자세히 보지 않았지만 상대적으로 큰 솔루션을 보았고 경쟁하기 쉽기 때문에 문제를 골라보십시오.
Borka223

1
좋은 대답입니다! 이것이 내 Klein 답변 과 동일한 방법을 사용한다는 것을 지적하고 싶었습니다 . (당신이 저를 복사한다고 비난하지 않습니다. 누군가가 단지 두 개의 비슷한 대답을 지적한다면.)
Sriotchilism O'Zaic

14

망막 , 3 바이트


1

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

인쇄 2합니다. 두 배로 인쇄합니다 4.

1다른 거의 대체 될 수 있습니다.

설명


1

빈 입력을로 바꿉니다 1.


비어있는 일치 수를 12 개로 계산합니다 (하나는 1앞뒤 하나).

프로그램을 두 배로 늘리면 첫 번째 단계와 같은 추가 단계가 제공됩니다. 이번에 1는 초기 및 이전에 삽입하여을 제공 111합니다. 빈 정규식의 일치 횟수를 세면 4 개를 얻습니다.


14

파이썬 REPL, 2 바이트

Pip, Dyalog APL, JavaScript, J 및 R에서도 작동

+1

나는 지금 TIO를 만들고 있습니다 .TIO에서 파이썬 repl을 사용할 수 없었습니다.


1
+1내가 정확히 무엇을 할 것인가 : P 그러나, 당신은 닌자가 약 1 분 정도 나를>>
HyperNeutrino

1
이것은 Dyalog APL에서도 작동합니다.
암소 ck


1
당신은 사용할 수 없습니다 REPL을 위해?
완전히 인간적인

1
내 +1이 있습니다.
Federico Poloni

12

Neim , 1 바이트

>

단순히 스택의 상단을 증가시킵니다.

스택은 시작하기 위해 무한한 양의 0으로 상상할 수 있으므로 1을 얻기 위해 0을 증가시키고 2를 얻기 위해 다시 증가시킵니다.

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

대안 솔루션 :

1 대신 2를 더합니다.


12

자바 스크립트, 38 바이트

setTimeout('alert(i)',i=1)/*
i++//*///


setTimeout('alert(i)',i=1)/*
i++//*///setTimeout('alert(i)',i=1)/*
i++//*///


1
좋은 것! 당신은 그냥 할 수 i++있습니까?
Arnauld

@ Arnauld : 실제로, 제안에 감사드립니다!
Benoit Esnard

12

Java8, 135 (118) 110 바이트

단일 , 인쇄 8

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

두 배 , 인쇄 16

interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///interface T{static void main(String[]a){System.out.print(Byte.SIZE);}}/*
class Byte{static int SIZE=16;}/**///

미리보기 답변, 118 바이트

단일 , 인쇄 1

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

두 배로 인쇄 2

interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///interface T{static void main(String[]a){System.out.print(T.class.getResource("B.class")==null?1:2);}}/*
enum B{}/**///

작동 원리

java-compiler는 소스 파일의 모든 클래스에 대해 단일 파일을 작성합니다. 따라서 이름이 B.class 인 리소스가 있는지 간단히 확인할 수 있습니다.


원래 답변, 135 바이트

단일 , 인쇄 1

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///

두 배로 인쇄 2

interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///interface T{static void main(String[]a){int i=1;try{Class.forName("B");i=2;}catch(Exception e){}System.out.print(i);}}/*
enum B{}/**///

당신이 코멘트로 한 일은 정말 멋지다. 그러나 정말로 새로운 라인이 필요합니까?
vikarjramun

오 nvm, 두 번째 줄에 대한 한 줄의 주석을 보지 못했습니다
vikarjramun

11

파이썬 2 , 32 바이트

print open(__file__,"a").tell()#

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

이중 소스 코드

설명

추가 모드에서 소스 코드 파일이 열립니다.

open(__file__,"a")

그런 다음 파일에서 현재 위치를 찾습니다. 추가 모드에서 열었 기 때문에 파일의 끝에 있습니다.

open(__file__,"a").tell()

이 길이를 인쇄

print open(__file__,"a").tell()

소스 코드를 두 배로 늘리면 더 많은 코드가 실행되지 않도록 주석을 추가하십시오.

print open(__file__,"a").tell()#

9

Excel VBA, 12 바이트

익명 VBE 즉시 창 기능으로 범위에서 입력 및 출력을 [A1]받습니다. 범위의 기본값 [A1]""(빈 문자열)이며, 한 번의 실행 후 다음은이 값을 설정 하고 이후의 모든 실행에 따라 1증가합니다 1.

[A1]=[A1+1]:

입출력

단일 버전

[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 1

두 배 버전

[A1]=[A1+1]:[A1]=[A1+1]:
?[A1]    ''# display the value of [A1] to the VBE immediate window
 2


8

껍질 , 3 바이트

|1"

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

다른 답변에서 본 것에 대한 독창적 인 아이디어.

설명

|Husk에서 "또는"연산자는 두 번째 인수가 사실이면 두 번째 인수를, 그렇지 않으면 첫 번째 인수를 반환합니다. 다른 유형의 인수에 적용되면 먼저 모든 인수를 숫자로 변환합니다. 문자열 (및 일반적으로 목록)의 변환은 길이를 계산하여 수행됩니다.

원래 프로그램에서 우리 |는 1에 적용 하고 빈 문자열은 0으로 변환됩니다. 결과는 1입니다.

배가 된 프로그램에서 우리 |는 1에 적용 하고 문자열 "| 1"을 2로 변환합니다. 결과는 2입니다.



7

CJam, 3 바이트

5],

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

5를 배열로 캡슐화합니다. 배열의 길이를 반환합니다. 코드를 복제하면 이전에 반환 된 길이 1이 이미 스택에 있으므로 길이 1을 반환하는 [1,5] 배열을 얻습니다.



7

Wumpus , 4 바이트

" O@

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

" O@" O@

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

일반 코드가 인쇄 32되고 이중 코드가 인쇄 64됩니다.

설명

"다른 많은 Fungeoid에서와 같이 작동합니다. 명령을 실행하는 대신 각 개별 문자 코드가 스택으로 푸시되는 문자열 모드를 토글합니다. 그러나 대부분의 다른 Fungeoid와 달리 Wumpus의 플레이 필드는 둘러싸이지 않으므로 대신 IP가 끝 부분을 반영하고 코드를 통해 앞뒤로 튀어 오릅니다.

따라서 단일 프로그램의 경우 다음 코드가 실제로 실행됩니다.

" O@O " O@

문자열이 푸시 32, 79, 64, 79, 32됩니다. 그런 공간은 아무것도는하지 않습니다 O인쇄 32하고,이 @프로그램을 종료합니다.

두 배로 된 프로그램의 경우 대신 IP가 반송되기 전에 문자열이 종료되므로 코드는 한 번만 통과됩니다.

" O@" O@

이번에는 문자열 밀어 32, 79, 64, O를 인쇄 64하고 @종료 프로그램.

이것은 유일한 4 바이트 솔루션 인 것으로 보입니다.


6

,,,, 2 바이트

1∑

설명

1∑

1   push 1
 ∑  pop everything and push the sum of the stack

소스 코드가 두 배인 경우 무언가가 누락되었거나 3이 아닐까요?
Taylor Scott

@TaylorScott 죄송합니다 . 스택의 모든 요소가 튀어 나와 있습니다.
완전히 인간적인

1
설명에 감사드립니다
Taylor Scott

시그마는 2 바이트입니다.
nishantjr

1
@nishantjr는 헤더에 링크 된 자체 코드 페이지를 사용합니다.
완전히 인간적인

6

배치, 13 바이트

@echo %~z0
:

설명 : %~z0소스 파일의 길이로 확장되므로 파일을 두 배로 늘리면 길이가 두 배가됩니다. 두 번째 줄은 아무것도하지 않는 빈 레이블을 정의합니다. 파일이 두 배가되면 @echo %~z0대신 이름이 붙은 레이블이되고 세 번째 줄은 빈 레이블이됩니다.


6

Q 기본,  44  28 바이트

끝에 줄 바꿈 이 없습니다 . 4단일 일 8때, 두배 일 때 출력합니다 .

4
READ x,y
?x+y
END
DATA 4,0

설명

단일 버전의 경우 :

  • 4 줄 번호입니다.
  • READ x,y로부터 처음 두 값을 사용 DATA문과에 저장합니다 xy. 따라서, xgets 4ygets 0.
  • ?x+y 두 숫자를 더한 다음 인쇄합니다.
  • END 프로그램을 종료합니다.

배가 된 버전에서 DATA문이된다 DATA 4,04할당하는 4모두 xy이렇게하고, x+y동일 8대신.


6

Befunge-98 , 5 바이트

90g.@

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

gFunge-Space에서 좌표 (9, 0)의 문자 값을 가져옵니다. .정수로 인쇄 @하고 프로그램을 중지합니다. 이중화되지 않은 버전에서 (9, 0)은 프로그램의 범위를 벗어 났으며 프로그램 외부의 Funge-Space는 공백의 기본값으로 초기화되므로 32를 인쇄합니다. 이중화 버전에서는 (9, 0)은 @문자이므로 64를 인쇄합니다.


이것은 내가 최고의 Befunge-98 답변이 ... 정말 독창적 인 답변처럼 보일 것으로 예상 한 것이 아닙니다!
MildlyMilquetoast


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.