연쇄 프로그램


26

도전

이 공격에서, 첫 번째 프로그램 P 기록 될 제 1 페이지 프로그램을 실행하는 무한 시퀀스의, N 개의 출력 / 생성 프로그램 (P) N + 1 . 첫 번째 n> = 2 프로그램을 연결할 때 시퀀스가 ​​출력되어야합니다 n.

처음 4 개의 프로그램이 다음과 같다고 가정 해 봅시다.

p1 p2 p3 p4

내가 실행했다면 p1출력해야합니다.

p2

내가 실행했다면 p1p2출력해야합니다.

2

내가 실행 p1p2p3p4했다면 출력해야합니다.

4

내가 실행했다면 p4다음 프로그램을 순서대로 생성해야합니다.

p5

채점

당신의 점수는 첫 번째 10프로그램 의 바이트 수입니다 .


시퀀스는 p1p2p3...항상 p1 부터 pn까지 입니까?
Moose

@Moose 네, 항상 p1에서 pn까지입니다.
Downgoat

5
이것은 흥미로운 문제입니다. 프로그램 순서는 충분히 쉽다; 연결이 더 어렵다.
Conor O'Brien

파일 액세스가 허용됩니까?
Lynn

@Mauris 네. 그러나 파일의 내용 및 이름의 바이트 수는 사용되는 각 프로그램의 총 바이트 수로 계산되어야합니다.
Downgoat

답변:


49

피스, 12

p1 :

l"1

p2 : 1

p3 : 1

기타..

p1p2p3 :

l"111 

산출: 3

설명:

l        length
 "1      string "1"

처음 실행할 때 단일 문자열 길이를 출력합니다 1. 이것은 또한 유효한 Pyth 프로그램이되어 1다시 출력 됩니다. 따라서 pn + 1 은 항상 1입니다. 프로그램이 연결되면 p1연결 프로그램의 길이가 출력됩니다 n.


9

루아, 950 900 바이트

s=io.open(arg[0]):read()if#s<95 then print(s)do return end end print(#s/90) do return end;

언 골프 드 :

s=io.open(arg[0]):read'*a'
if #s < 96 then 
    print(s)
    do return end 
end 
print(#s/90) 
do return end;

설명:

첫 번째 줄은 프로그램의 전체 소스를 가져옵니다. 그런 다음 전체 프로그램의 길이를 1 + 단일 프로그램의 길이와 비교합니다. 현재 프로그램의 크기가이 값보다 작 으면 다음 프로그램 인 소스 p2가 인쇄되고 종료됩니다. 각 반복은 단지 헛소리입니다. 이들 중 몇 개를 조합하면 조건부 조건이 실패하고 연결된 프로그램의 길이를 하나의 프로그램의 길이로 나눈 값을 연결된 프로그램 수 n으로 인쇄합니다.


다른 방법을 사용하는 경우 +1 이것이 제가 바라던 창의적인 답변의 유형입니다.
Moose

Lua의 경우 +1, 다른 답변보다 더 긴 방법 인 경우 더 시원하게 선택 : P
cat

하하 감사합니다, 나는 비 골프적이고 상당히 장황한 언어로 이것을 할 수 있다는 것을 매우 자랑스럽게 생각했습니다 :)
Nikolai97

4

Vitsy , 19 바이트

여기서 문자열을 다루지 않고 메서드 트릭을 사용합니다.

p1

1ml1-\+N
1

p2

1

p3

1

등등.

아래 설명 :

1ml1-\+N
1m       Execute the first index of lines (the bit with the ones)
  l1-    Get the length minus 1.
     \+  Add them all up.
       N Output as number.

1        Push one to the stack.

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


4

Vitsy , 14 바이트

Pyth 및 Jolf 답변과 유사하게 문자열을 매핑합니다. 유일한 차이점은 줄 바꿈 기능을 사용하여 항상 올바른 길이를 얻을 수 있다는 것입니다.

p1

'l3-N

p2

1

1이 대체 어떤 하나의 숫자.

p3 등은이 패턴과 일치 Integer.MAX_VALUE하며 언어의 정수 제한 이 될 때까지이 작업을 수행 할 수 있습니다.

설명:

'l3-N
'     Wrap around the line until finding another '. Since no ' is found before the
      End of the line, it wraps around.
 l    Get the length of the stack.
  3-  Subtract three.
    N Output as number.

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


4

진지하게, 15 바이트

첫 번째 프로그램, 6 바이트 (인쇄 불가능) :

5Ql-.

육각 덤프 :

35516c2d2e7f

이 프로그램은 인쇄 1: 온라인 시도

나머지 프로그램은 모두 1Pyth 답변과 마찬가지로 자체적으로 인쇄되는 유효한 프로그램입니다. 원래 프로그램은 소스 코드의 길이에서 5를 뺀 값을 인쇄하고 즉시 종료됩니다. 1끝에 추가하면 매번 소스 코드의 길이가 1 바이트 씩 증가하지만 실행되지는 않습니다.


2

Jolf , 14 바이트

여기 사용해보십시오!

a-lq4
a      print
  lq   the length of the source code
 -  4  minus 4

실행되면이 인쇄 1됩니다. 따라서 p2 = 1. p2수율 실행 1. 모두를위한, 그래서 N > 1, pN = 1.

관찰 p1p2: a-1q41. 이것은 다음으로 번역됩니다.

alert(sub(length("a-lq41"),4));
1;

첫 번째 인쇄 후에는 암시 적 인쇄가 비활성화 2되므로 소스 코드의 길이에서 4를 뺀 길이가 2이므로을 인쇄합니다 .


2

루비, 318 바이트

p 1 :

x=DATA.readlines.size
_="_=%p;puts _%%_"
puts x>0?x+1:_%_
__END__

각각의 개별 프로그램 (P)은 출력 한 줄을 quine : _="_=%p;puts _%%_";puts _%_.

이 페이지의 끝이 quines를 추가 할 때 1 , 그들은에서 선으로 결국 DATA그들이 마법의 아래에 있기 때문에 객체 __END__.

테스트는 다음과 같습니다.

$ ruby chain.rb                                    # running p1
_="_=%p;puts _%%_";puts _%_

$ ruby -e '_="_=%p;puts _%%_";puts _%_'            # running p2
_="_=%p;puts _%%_";puts _%_

$ ruby -e '_="_=%p;puts _%%_";puts _%_'            # running p3
_="_=%p;puts _%%_";puts _%_

$ # Concatenating p2 and p3 to p1:
$ ruby -e '_="_=%p;puts _%%_";puts _%_' >> chain.rb
$ ruby -e '_="_=%p;puts _%%_";puts _%_' >> chain.rb

$ ruby chain.rb                                    # running p1p2p3
3

연결된 첫 번째 10 개의 프로그램은 다음과 같습니다 (318 바이트).

x=DATA.readlines.size
_="_=%p;puts _%%_"
puts x>0?x+1:_%_
__END__
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_

1

C #, 2099 + 7 = 2106 바이트

첫 번째 프로그램 (컴파일러 플래그 사용 /main:A) :

class A{static void Main(){int a=System.Reflection.Assembly.GetEntryAssembly().GetTypes().Length;var b=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a>1?"{2}":b,0,b.Replace("\"","\"\""),a);}}

두 번째 프로그램 :

class A0{static void Main(){var a=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a,0+1,a.Replace("\"","\"\""));}}

세번째 프로그램 :

class A1{static void Main(){var a=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a,1+1,a.Replace("\"","\"\""));}}

당신은 아이디어를 얻습니다.


0

자바 스크립트 ES6은 점수 483 (455)

프로그램 1, 77 바이트 :

v=1;setTimeout(_=>alert(v>1?v:'a=_=>this.v?v++:alert("a="+a+";a();");a();'));

프로그램 2 이상, 각각 42 바이트 :

a=_=>this.v?v++:alert("a="+a+";a();");a();

0

PHP, 1470 바이트

프로그램 1 : 219 바이트

class O{public$n=1;function __destruct(){echo($n=$this->n)>1?$n:'if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));';}}$o=new O();

프로그램 2 및 139 바이트 이상 :

if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));

다음과 같이 사용하십시오.

php -r "class O{public$n=1;function __destruct(){echo($n=$this->n)>1?$n:'if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));';}}$o=new O();"

여기에 자세히 설명되어있는 약간의 골프 버전의 PHP quine 기법을 사용합니다 : http://10types.co.uk/the-lab/a-minimal-php-quine/

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