코드 골프 : 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
여기에 목적입니다 A및 a"문자"다른 생각?
— 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
모든하지만 1및 2문장 부호입니다.
— 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.