거울 퀴네 (또는 내 머리가 아파)


32

나는 읽고 있었다 코드를 역전 퀴인 인쇄 그리고 나는 역행 코드도 실행 가능 하다면 더 흥미로울 것이라고 생각했다 . 따라서이 과제는 다른 규칙과 요구 사항을 모두 갖지만, 같은 언어 또는 다른 언어로 되돌려도 소스가 뒤로 인쇄되는 유효한 소스 여야합니다.

리버스 퀴네 챌린지의 모든 규칙과 점수가 적용되므로이 질문에 대한 모든 답변이 해당 답변에 답변합니다 (점수는 아님).

편집하다:

요청에 따라 이제 모든 규칙이 여기에 복사되었습니다.

규칙 :

  • 실행될 때 출력 p '를 생성하는 프로그램 p를 작성하십시오. 여기서 p'는 p를 거꾸로하고, 실행되면 p '는 p를 생성합니다.
  • 없음 사용하여 다른 파일이 없습니다 (예를 들어 reverse.txt)
  • 최소 코드 길이는 2 자입니다.
  • 프로그램은 회문이 될 수 없습니다.

채점 :

  • 인터넷에서 풀 데이터를 사용하는 경우 +50
  • 자신의 소스 코드를 읽는 경우 +25
  • 문자 당 +1 포인트
  • 최저 점수가 이깁니다.

eval(eval(eval(eval(eval(eval(eval(eval(eval(p)))))))))
앤드류 라르손

단지 당신이 p의 출력을 실행하는 [...]의 출력을 실행하는 출력을 수행 할 수 있다고 말하는 것입니다.
Andrew Larsson '12

@AndrewLarsson 실제로 p를 빌드하는 개념 증명은 c와 p '로 작성됩니다.
hildred

아, 멋지다!
앤드류 라르손

1
응, 너무 늦었 어 중복되지 않습니다.
Johannes Kuhn

답변:


22

GolfScript, 46 자

0{`".~#"+.-1%+\.!@@}.~##~.}@@!.\+%1-.+"#~."`{1

글쎄, 이것은 추악하지만 작동합니다. 출력은 코드가 반전 된 것과 같으며 원래 코드를 다시 출력하는 유효한 GolfScript 프로그램입니다.

좋아, 내가 어떻게 구성했는지 설명하려고 노력할 께. 먼저 quine에서 시작 하여이 대답{".~"}.~ 과 같이 수정하여 자체를 되돌립니다. 출력을 그 자체로 실행 가능하게 만들기 위해 코드를 뒤집기 전에 코드 사본을 작성하고 코드 끝에 코드를 포함시켜 최종 버전의 반전 된 버전이 주석이되었습니다. 따라서 우리는 회문 소동을 얻습니다.#

{`".~#"+.-1%}.~##~.}%1-.+"#~."`{

그러나 규칙에 따라 회문은 허용되지 않으므로 어떻게 든 대칭을 깨야했습니다. 내가 가장 쉬운 방법은을 포함하는 것입니다 생각 0코드에서 (그 자체로, GolfScript에서 quine 인)과에 플립 1!반전 된 복사본을 만든 후. 나머지 복잡성의 대부분은 모든 것을 올바른 순서로 얻기 위해 추악한 스택 조작입니다.


반대로 할 때 골프 스크립트입니까 아니면 다른 언어입니까?
hildred

네, GolfScript입니다. 실제로,를 제외 0하고 1시작과 끝, 코드의 나머지 부분은 회문이다.
Ilmari Karonen

9
와우. 좋아, 나는 더 이상이 SE를 위해 충분히 똑똑하지 않다 :(
Cruncher

21

펄과 C 6478 1955

#!/usr/bin/perl -i//
$_=<<'rahc';eval $_; #//
print scalar reverse "#!/usr/bin/perl -i//\n\$_=<<'rahc';eval \$_; #//\n${_}rahc\n" #//
__END__
__END__ enifed#
};)"{ = ][cn\rahcn\n\"(p
};)'n\'( rahctup) 1 == 21%b ( fi
;)d(p;)]1-b[c,",d%",)d(foezis,d( ftnirpns{)b--;b;)c(foezis=b( rof
;)c(p;]9[d rahc;b tni{)(niam diov
}};)]1-b[c(rahctup )]1-b[c(fi{)b--;b;)c(nelrts=b(rof;b tni{)c*rahc(p diov
>h.gnirts< edulcni#
>h.oidts< edulcni#
;}
,0
,53,33,74,711,511,411,74,89,501,011,74,211
,101,411,801,23,54,501,74,74,01,63,59,16
,06,06,93,411,79,401,99,93,95,101,811,79
,801,23,63,59,95,23,53,74,74,01,211,411
,501,011,611,23,511,99,79,801,79,411,23,411
,101,811,101,411,511,101,23,43,53,33,74,711
,511,411,74,89,501,011,74,211,101,411,801,23
,54,501,74,74,29,011,29,63,59,16,06,06
,93,411,79,401,99,93,95,101,811,79,801,23
,29,63,59,95,23,53,74,74,29,011,63,321
,59,521,411,79,401,99,29,011,43,23,53,74
,74,01,59,59,96,87,86,59,59,01,59,59
,96,87,86,59,59,23,101,011,501,201,101,001
,53,01,521,95,14,43,321,23,16,23,39,19
,99,011,29,411,79,401,99,011,29,011,29,43
,04,211,01,521,95,14,93,011,29,93,04,23
,411,79,401,99,611,711,211,14,23,94,23,16
,16,23,05,94,73,89,23,04,23,201,501,01
,95,14,001,04,211,95,14,39,94,54,89,19
,99,44,43,44,001,73,43,44,14,001,04,201
,111,101,221,501,511,44,001,04,23,201,611,011
,501,411,211,011,511,321,14,89,54,54,95,89
,95,14,99,04,201,111,101,221,501,511,16,89
,04,23,411,111,201,01,95,14,99,04,211,95
,39,75,19,001,23,411,79,401,99,95,89,23
,611,011,501,321,14,04,011,501,79,901,23,001
,501,111,811,01,521,521,95,14,39,94,54,89
,19,99,04,411,79,401,99,611,711,211,23,14
,39,94,54,89,19,99,04,201,501,321,14,89
,54,54,95,89,95,14,99,04,011,101,801,411
,611,511,16,89,04,411,111,201,95,89,23,611
,011,501,321,14,99,24,411,79,401,99,04,211
,23,001,501,111,811,01,26,401,64,301,011,501
,411,611,511,06,23,101,001,711,801,99,011,501
,53,01,26,401,64,111,501,001,611,511,06,23
,101,001,711,801,99,011,501,53,01,95,521,01
{ = ][c
rahc

편집하다:

간단한 설명 : perl에서 두 개의 흥미로운 줄은 두 번째와 세 번째입니다. 두 번째 줄에는 두 개의 문이 있는데, 첫 번째 문은 나머지 문서를 문자열로 읽습니다. 두 번째는 문자열을 회피합니다. 세 번째 줄은 모든 것을 거꾸로 인쇄합니다. 다른 모든 것은 무시됩니다. c 측에서 프로그램은 문자열로 배열을 가지며 배열은 문자열로 인쇄되며 나머지는 주석입니다.


1
왓. : O 내 머리가 터졌다. 그러나 나는 그것에 6536 문자를 계산합니다 ...
Doorknob

뭐 ... 어떻게 ... 0_0
모자를

@DoorknobofSnow 나는 잘못된 버전을 세었다. 그러나 여기에 더 짧은 버전이 있습니다.
초에 hildred

이것은 믿기 힘든 일이야! Haskell / C는 또 다른 가능한 조합 일 수 있습니다.
theonlygusti

@theonlygusti, 게시하고 컴파일 할 수 있으면 찬성합니다.
초에 hildred

8

루비 145

DATA.read.tap {| a | puts a.reverse, a.tr ( "\ x79 \ x59", "\ x59 \ x79")}
:와이
__종료__
__DNE__
와이:
}) "97x \ 95x \", "95x \ 97x \"(rt.a, esrever.a stup | a | {pat.daer.ATAD

주요 아이디어는 간단합니다. 소스 코드의 첫 번째 절반을 뒤로 가면 루비에서 __END__읽을 수 있습니다 DATA. 그런 다음이 데이터의 반전을 인쇄 한 다음 데이터를 인쇄하면 원래 소스 코드가 다시 표시됩니다.

문제는 이것이 회문이되고 (첫 번째 줄에는 끝선이 필요하다는 점에 유의하십시오), 대칭을 깨야합니다. 방금 :y코드에 기호 를 추가하고 실행 사이 에이 기호를 소문자와 대문자로 변환하여 두 번의 실행 후 원래 상태로 되 돌리는 일부 코드가 추가되었습니다 .

하나를 시험하십시오 : 그들은 실행될 수 있습니다

$ ruby rq2.rb > rq2t.rb
$ ruby rq2t.rb > rq2tt.rb

테스트 2 : 두 번의 실행 결과가 원래 소스를 반환합니다

$ diff rq2.rb rq2tt.rb
$

테스트 3 : 코드가 회문이 아닙니다 (중간 실행이 다릅니다)

$ diff rq2.rb rq2t.rb
3c3
< :y
---
> :Y
6c6
< Y:
---
> y:

4

> <>, 21 19 바이트

'rd3*70.r l?!;o90.<

여기 사용해보십시오!

편의를 위해 *> <> 인터프리터를 사용하지만 유효한> <> 코드입니다.


오류가 허용되면 16 바이트로 수행 할 수 있습니다.

'd3*}70.!r  !|o|

여기 사용해보십시오!


@JoKing 감사합니다! 7am이었다. 그리고 나는 그것을 구성하기에는 너무 피곤했다. 몇 시간 안에 편집하겠습니다.
Discordian

4

Gol> <> , 11 바이트

":5-}H}+5:'

전체 바이트가 잘 렸습니다! 그것은 거의 회문이지만, 기술적으로 '+'와 '-'때문이 아닙니다.

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

아래 두 가지가 작동하지 않거나 최소한 도전 과제의 사양을 충족하지 않지만 위의 코드는 작동합니다.

약간 더 어린 버전, 12 바이트

"r2ssrH}+5:'

큰 따옴표를 사용하고 5 씩 늘리면 바이트가 사라집니다! 이 새로운 버전은 회문처럼 보이지 않습니다.

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

이전 버전, 13 바이트

"r2ssrHrss7r'

이전에는 JoKing이 지적한 문제가 있었지만, 고맙지 만 지금은 작동하지만 4 바이트의 가격으로 ...

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


1

도와주세요! (27 바이트)

소스 코드를 읽기 때문에 25 바이트가 추가되었습니다.

<space>q

작동 방식 :
<space>-공백이 아닌 문자로 끝나는 주석
q-인쇄 소스 코드가 반전 됨 (q "space")

역전 :

q<space>

작동 방식 :
q-소스 코드 반전 (현재는 q)
<space>-공백이 아닌 문자로 끝나는 주석, q 명령의 시작 부분에 문자 추가 ( "space"q 작성)

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