ミラークイン(または頭が痛い)


32

私は読んでいたコードを逆方向に印刷する-逆クインそして、逆方向のコードも実行可能な場合、これはより興味深いと思いました。したがって、このチャレンジには、他のすべてのルールと要件がありますが、逆になったら有効なソースである必要があります(同じまたは別の言語で、ソースを逆方向に印刷します)

逆クインチャレンジからのすべてのルールとスコアリングが適用されるため、この質問に対するすべての回答がその質問に回答します(ただしスコアも取得しません)。

編集:

リクエストにより、すべてのルールがここにコピーされました。

ルール:

  • 実行時に出力p 'を生成するプログラムpを記述します。p'はpを逆方向に、実行時にp 'はpを生成します。
  • 他のファイルを使用しない(例 reverse.txt
  • 最小コード長は2文字です。
  • プログラムを回文にすることはできません。

得点:

  • インターネットからプルデータを使用する場合は+50。
  • 独自のソースコードを読む場合は+25。
  • 1文字につき+1ポイント。
  • 最低スコアが勝ちます。

eval(eval(eval(eval(eval(eval(eval(eval(eval(p)))))))))
アンドリューラーソン

pの出力を実行する[...]の出力を実行する出力を実行する出力を実行できると言っているだけです(backwards quineを除くすべてのquineと同じです)。
アンドリューラーソン

@AndrewLarsson実際、私がpを構築している概念実証はperlのcとp 'で書かれます。
13

ああ、それはクールだろう!
アンドリューラーソン

1
Yeah, saw that too late. Not a duplicate.
Johannes Kuhn

回答:


22

GolfScript, 46 chars

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

Well, this is ugly, but it works. The output equals the code reversed, and is also a valid GolfScript program which outputs the original code again.

OK, let me try to explain how I constructed it. First, I started from the quine {".~"}.~, and modified it as in this answer to reverse itself. To make the output an executable quine in itself, I made a copy of the code before reversing it, and included a # at the end of the code, so that the reversed version at the end became just a comment. Thus, we get the palindromic quine:

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

However, by the rules, palindromes are not allowed, so I needed to break the symmetry somehow. I figured the easiest way would be to include a 0 (which, in itself, is a quine in GolfScript) in the code and flip it to 1 with ! after creating the reversed copy. Most of the remaining complexity is just ugly stack manipulation to get everything in the right order.


それは逆にされたときにゴルフスクリプトですか、それとも別の言語ですか?
13

はい、両方ともGolfScriptです。実際、を除く0と、1最初と最後に、コードの残りの部分は回文です。
イルマリカロネン

9
ワオ。さて、私はもうこのSEに十分な気がしません:(
ランチャー

21

Perlおよび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

編集:

Brief explanation: from perl the two interesting lines are the second and the third. The second line has two statements the first of which reads the rest of the document into a string. The second evals the string. The Third line prints everything backwards. every thing else gets ignored. from the c side you have an array which has the program as a string, which gets printed as an array and a string, and the rest is a comment.


1
wat. :O My head exploded. But I count 6536 characters in that...
Doorknob

What...how... 0_0
The Guy with The Hat

@DoorknobofSnow I counted the wrong version. But here is a shorter version.
hildred

This is incredible! I think Haskell/C might be another feasible combination.
theonlygusti

@theonlygusti, if you post it and I can compile it, I will upvote it.
hildred

8

Ruby 145

DATA.read.tap{|a|puts a.reverse,a.tr("\x79\x59","\x59\x79")}
:y
__END__
__DNE__
Y:
})"97x\95x\","95x\97x\"(rt.a,esrever.a stup|a|{pat.daer.ATAD

The main idea is simple: just put the first half of the source code backwards after the __END__ which can be read using DATA from ruby. Then just print the reverse of this data, then print the data, and you get back the original source code

The problem is, that this becomes a palindrome (note that the first line needs an endline), so we have to break the symmetry. I just added a symbol :y to the code, and some code that will transform this symbol between lowercase and uppercase between runs, thereby reverting to the original state after two runs.

Test one: they can be executed

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

Test two: the result of two runs will return the original source

$ diff rq2.rb rq2tt.rb
$

Test three: the code is not a palindrome (the middle run is different)

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

4

><>, 21 19 bytes

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

Try it here!

Uses the *><> interpreter for convenience, but this is valid ><> code.


If erroring out is allowed, then it can be done in 16 bytes:

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

Try it here!


@JoKing thank you! It was 7am and I was just too tired to put that together. I'll edit it in, in a couple hours.
Discordian

4

Gol><>, 11 bytes

":5-}H}+5:'

A whole byte chopped off! it almost is a palindrome, but technically isn't because of the '+' and '-', haha!

Try it online!

The two below don't work, or at least they don't meet the specifications of the challenge, but the code above does.

slightly younger version, 12 bytes

"r2ssrH}+5:'

Golfed off a byte, simply by using the double quote and incrementing it by 5! And this new version looks less like a palindrome.

Try it online!

older version, 13 bytes

"r2ssrHrss7r'

There was a problem with the previous that JoKing pointed out, thank you for that, now it works, but with the price of 4 extra bytes...

Try it online!


1

Help, WarDoq! (27 bytes)

25 bytes added because of reading source code.

<space>q

How it works:
<space> - a comment that ends on non-space character
q - print source code reversed (q"space")

Reversed:

q<space>

How it works:
q - print source code reversed (q for now)
<space> - a comment that ends on non-space character, and add a character to beginning of q command (making "space"q)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.