코드 골프 : Quine and Antiquine


13

이 과제는 Can You Meta Quine 과 비슷합니다 .

quine은 STDOUT에서 자체적으로 생성되는 프로그램입니다. 이 문제는 실행할 때 STDOUT에서 프로그램 B를 생성하는 프로그램 A를 생성하는 것입니다. 실행시 프로그램 B는 STDOUT에서 프로그램 A를 생성합니다. 프로그램 A와 B는 같은 언어로 작성되고 실행되어야합니다. 관련 질문은 A! = B를 제한했습니다. 너무 쉬워 보였습니다. 따라서이 질문에 대해 다음 규칙을 사용하여 A와 B가 앤티 퀸이라고 주장합니다.

  1. 프로그램 A와 B는 같은 문자를 사용하거나 공백 및 명령문 구분 기호 및 문장 부호 문자를 저장할 수 없습니다.
  2. 프로그램 A와 B는 각각 공백이나 문장 구분 기호 또는 문장 부호 문자가 아닌 문자를 하나 이상 포함해야합니다.
  3. 규칙 1과 2의 목적 상 '공백'이라는 용어는 그 자체로 해석되는 문장, 연산자 또는 기호 인 기호 또는 기호 시퀀스를 제외합니다 (구분 기호와 반대). 따라서 공백 언어에는 공백이 없습니다.
  4. 문장 구분자는 문장 내에서 문장을 분리하기 위해 일반적으로 사용되는 구문 요소입니다. 여기에는 파이썬의 줄 바꿈 또는 Java, perl 또는 C의 세미콜론이 포함됩니다.
  5. 문장 부호 문자는 공백이나 POSIX 단어 문자 클래스가 아닌 ASCII 문자입니다 (즉, 밑줄은이 목적을 위해 문장 부호가 아닙니다). 즉 ispunct(), true를 반환하지만 그렇지 않습니다 _.
  6. 실행될 때 프로그램 A는 STDOUT에 프로그램 (프로그램 B)을 생성해야하며, 차례로 실행되면 프로그램 A가 생성됩니다.
  7. 프로그램 A와 B는 동일한 프로그래밍 언어로되어 있어야합니다.
  8. 사용 된 프로그래밍 언어는 실제로 프로그래밍 언어 여야합니다. 다른 경우를 제외하고는 튜링이 완료되어야한다고 제안합니다.
  9. A 및 B 중 하나 이상이 언어 내에서 하나 이상의 문을 실행해야합니다.

이것은 코드 골프이므로 가장 짧은 답이 이기고 점수는 프로그램 A의 길이 (바이트)입니다 (즉, 프로그램 B의 길이는 관련이 없음).


첫 번째 절의 예외 목록에 "punctuation"을 추가 할 수 있습니까? 그렇지 않으면 여러 언어로 (특히 주 함수에서 중괄호가 필요한 언어)이 작업을 해결할 수 없습니다.
FUZxxl

관련되어 있지만 아마도 충분히 다를 수 있습니다.
Martin Ender

@FUZxxl 구두점은 허용했지만 밑줄은 제외했습니다.
abligh

1
여기에 목적입니다 Aa"문자"다른 생각?
HostileFork은 그나마 신뢰 SE 말한다

1
당신이 경기 규칙 5. 것으로 ASCII 문자의 전체 목록을 제공하면 좋을 것
aditsu 종료를 SE 악이기 때문에

답변:


5

GolfScript, 13 바이트

1{\~\".~"}.~

출력은

-2{\~\".~"}.~

초기 프로그램을 생성합니다.

출력의 출력에 포함되므로 바이트 수에는 후행 LF가 포함됩니다.

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

작동 원리

1       # Push 1.
{       # Start code block.
  \~\   # Apply logical NOT to the second topmost element of the stack.
  ".~"  # Push that string.
}       # End code block.
.~      # Duplicate the code block and execute the copy.

GolfScript는 종료시 스택 내용을 인쇄합니다.


다시 문제 설명을 읽어 보시기 바랍니다 -Programs A and B may not use any of the same characters, save for whitespace and statement separators, and punctuation characters.
isaacg

1
모든하지만 12문장 부호입니다.
Dennis

좋아, 규칙을 마지막으로 읽은 후에 규칙이 변경되었습니다.
isaacg

그렇습니다. 공백을 문으로 사용하지 못하게하는 규칙을 말했지만 구두점에 동일한 허점이 있음을 잊었습니다. 허점은 법적으로 악용되었습니다.
abligh

14

파스칼 (731 자)

프로그램 A :

program s;{$h+}uses sysutils;const p='program s;{$h+}uses sysutils;const p=';a='a';aa=''';';aaa='a=''';aaaa='''';aaaaa='begin write(lowercase(p+aaaa+p+aa+aaa+a+aa+a+aaa+aaaa+aa+aa+a+a+aaa+aaa+aaaa+aa+a+a+a+aaa+aaaa+aaaa+aa+a+a+a+a+aaa+stringreplace(stringreplace(stringreplace(stringreplace(aaaaa,aaaa,aaaa+aaaa,[rfreplaceall]),''lower''+''c'',''tm''+''p'',[]),''up''+''c'',''lower''+''c'',[]),''tm''+''p'',''up''+''c'',[])+aa+aaaaa))end.';begin write(upcase(p+aaaa+p+aa+aaa+a+aa+a+aaa+aaaa+aa+aa+a+a+aaa+aaa+aaaa+aa+a+a+a+aaa+aaaa+aaaa+aa+a+a+a+a+aaa+stringreplace(stringreplace(stringreplace(stringreplace(aaaaa,aaaa,aaaa+aaaa,[rfreplaceall]),'lower'+'c','tm'+'p',[]),'up'+'c','lower'+'c',[]),'tm'+'p','up'+'c',[])+aa+aaaaa))end.

출력 프로그램 B :

PROGRAM S;{$H+}USES SYSUTILS;CONST P='PROGRAM S;{$H+}USES SYSUTILS;CONST P=';A='A';AA=''';';AAA='A=''';AAAA='''';AAAAA='BEGIN WRITE(UPCASE(P+AAAA+P+AA+AAA+A+AA+A+AAA+AAAA+AA+AA+A+A+AAA+AAA+AAAA+AA+A+A+A+AAA+AAAA+AAAA+AA+A+A+A+A+AAA+STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(AAAAA,AAAA,AAAA+AAAA,[RFREPLACEALL]),''LOWER''+''C'',''TM''+''P'',[]),''UP''+''C'',''LOWER''+''C'',[]),''TM''+''P'',''UP''+''C'',[])+AA+AAAAA))END.';BEGIN WRITE(LOWERCASE(P+AAAA+P+AA+AAA+A+AA+A+AAA+AAAA+AA+AA+A+A+AAA+AAA+AAAA+AA+A+A+A+AAA+AAAA+AAAA+AA+A+A+A+A+AAA+STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(STRINGREPLACE(AAAAA,AAAA,AAAA+AAAA,[RFREPLACEALL]),'LOWER'+'C','TM'+'P',[]),'UP'+'C','LOWER'+'C',[]),'TM'+'P','UP'+'C',[])+AA+AAAAA))END.

프로그램 A를 출력합니다.


3
나는 사례 번역의 사용을 즐기고 있습니다.
abligh

11

ROT13 ( 규칙 업데이트 후 더 이상 경쟁하지 않음 )

이것이 언어로 간주되는지 확실하지 않지만, 확실히 도전에 맞서는 것은 아닙니다. 일반적으로와 같은 특정 유틸리티에 대한 답변 sed도 허용됩니다. 그러나 그것은 판단 호출이므로 계산하지 않으면 제거 할 것입니다 (언어로 간주되는 것에 대한 메타 토론이 있습니까? 편집 : 현재 )

A

A와 사이의주기 N:

~>> echo "A" | rot13
N
~>> echo "A" | rot13 | rot13
A

rot13이 단순히 입력을 STDIN받고 프로그램을 실행 하지 않기 때문에 이것이 작동하지 않는다고 생각합니다 . 길이가 0 인 프로그램이라고 주장하는 경우 규칙 2를 충족시키지 못합니다. 프로그램 ( sed)이 전달 된 것 sed -e입니다. 이 허용 되었다면, catquine 될 것이며, tacquine 및 antiquine 될 것이다. 그러나 아무것도에 소스를 생산하지 않습니다 cat, tac또는 그 문제에 관해서는 rot13.
abligh

@abligh rot13이 사용되는 언어 인 경우 왜 rot13의 소스 코드를 인쇄해야합니까? 또한 Golfscript, Python 또는 다른 것을 실행하는 경우 stdin 또는 파일을 통해 소스 코드를 전달할 것이므로 실제로 차이는 없습니다. 이 경우 rot13 인터프리터입니다.
Ingo Bürk

rot13프로그래밍 언어는 '프로그래밍 언어'에 대한 합리적인 정의를 충족하지 않는 것으로 보이며 아무것도 해석하지 않습니다. 더 명확하게하기 위해 질문을 수정하겠습니다.
abligh

난 괜찮아. 이 답변을 더 이상 경쟁하지 않는 것으로두고 메타 토론을 시작하겠습니다. 그건 그렇고 좋은 도전입니다. "실제"솔루션을 기다릴 수 없습니다!
Ingo Bürk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.