ダブルデューティー・クイン:quine!dlroW、olleH


13

実行時に独自のソースコードを出力するプログラムを作成します。簡単そうですね。

キャッチは、ソースコードが逆になったときに、プログラムが「Hello、World!」を出力する必要があることです。正確に、引用符なし。

これはコードゴルフであるため、バイト数が最も少なくなります。

編集:あなたの馬は適切な馬でなければなりません。



4
@Megoは公平に言って、これは「ソースコードの関数Xを印刷する」ものではないので、私がそこで話しているような一般的なクインではありません。それはおそらく、私たちが持っている他の「プログラムを逆にしたとき...」の課題とは大きく異なることはおそらくないだろうということです。
マーティンエンダー

1
@MartinBüttnerあなたが説明した課題と同じくらい、同じ推論が当てはまると感じています。
メゴ

回答:


8

Y、19バイト

Upxp"!dlroW ,olleH"

UU次の文字列U(この場合はソースコード)が満たされるまで、先頭に文字列をキャプチャします。pアイテムを印刷しx、終了リンクです。逆にすると、これは次のようになります。

"Hello, World!"pxpU

これは、文字列をキャプチャし、で印刷しp、再びでプログラムを終了しxます。

ここで試してみてください!


4
UU暗黙的にプッシュしますか?ಠ_ಠ
SP3000

1
@ Sp3000プログラムが自分自身を変更できるように作成されています。より技術的には、このUコマンドは「チェーンリンクキャプチャコマンド」です。それはクイニング用に作られていませんが、それは私がそれをクイニングに使用するのを止めません。:P
コナーオブライエン

1
これが適切な馬としてカウントされるかどうかはわかりません。私たちの定義が必要となるプログラムの異なる部分をコードしているプログラムのセクションを、しかしU...ちょうどエンコードU...
デニス

@Dennisはエンコードを定義しますか?pエンコードの一部であるビットが出力を行うと思いました。
コナーオブライエン

1
私はエンコードを出力を生成するものとしてとったのでpx数えません。たとえば、コードで印刷する必要がある場合でも、最短のSMBFクインは依然としてカンニングクインと見なされます。ただし、Martinに説明を求める価値があるかもしれません。
デニス

20

JavaScript(ES6)、42 38バイト

f=_=>/\//g&&"f="+f||"!dlroW ,olleH">=_

逆転

_=>"Hello, World!"||f+"=f"&&g//\/>=_=f

説明

逆にすると、文字列を返す匿名関数になりますHello, World!

正規表現/\//gは反転>=_=fされるとコメントになり、構文的に無効なものを反転されたコードでコメントアウトできます。


これは非常に賢い方法です。:)私はこれを考えていなかったでしょう。
ericw31415 16

3
ただうさんくさい-目のため+1: =_=
ダレルホフマン

6

JavaScript(ES6)、71バイト

trela=a=>alert("trela="+trela+"\ntrela\n``")//
`!dlroW ,olleH`
trela
``

使い方:

1行目はtrela、実行時にプログラムのソースコードを出力する関数を定義しています。行2は割り当てられていない文字列で、何もしません。3行目と4行目でtrelaは、テンプレート文字列の構文を乱用しています。

逆に:

``
alert
`Hello, World!`
//)"``n\alertn\"+alert+"=alert"(trela>=a=alert

使い方:

行1は割り当てられていない文字列で、何もしません。2行目と3行目は、テンプレート文字列の構文を乱用して印刷しますHello, World!。行4はコメントです。


JavaScriptの構文には多少の余裕があるようです。まあ、少なくともPythonよりも多くです。それはすばらしい。
R.カップ

空は``不要ですか?
Rɪᴋᴇʀ

@EasterlyIrkいいえ、呼び出す必要があるtrela前方バージョン(QUINEを印刷)機能を
jrich

@jrichああ、私はそれ``が議論だったことに気づかなかった。涼しい。
Rɪᴋᴇʀ

2
このtrela辺りを見るのに慣れる必要があるように感じます...> _>
コナーオブライエン



2

戻り値、94バイト

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'

逆に:

'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"

Try it here.

STDOUTへの出力。より良い馬のフレームワークを見つけるまで、これは今のところしなければなりません。

説明

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"

これには、クイン文字列が含まれます。逆に、これはスタックにプッシュされますが、出力されません。

34¤¤,,,,,,,,,,,,,

これにより、引用文字がスタックにプッシュされ、出力するものがなくなるまで結果が2回出力されます。逆に、これは既にスタックにある文字コードを印刷します。

% 'H'e'l'l'o',' 'w'o'r'l'd'!'

これは一番上のスタック項目をポップし(逆にスペース文字をポップします)、一連の文字コードをスタックにプッシュします(逆に、これらの文字コードは一連のによって印刷されます,)。


これが本当にクレイジーなリターンコードなのか、通常のリターンコードなのかはわかりません。
ダウンゴート

どちらも ;_; 私は毎月泣く
ママファンロール

2

分裂2、42バイト

この回答では、@MartinBüttnerによる優秀な馬の恥知らずな適応

'!+O!'!d'!l'!r'!o'!W'! '!,'!o'!!l'!e'!H'R"

オンラインで試す

そして逆に

"R'H!'e!'l!!'o!',!' !'W!'o!'r!'l!'d!'!O+!'

オンラインで試す

クインバージョンでは、アトムはR見出しの右から始まります。"開始は、次にラップモード印刷"(自身を)。これは、を除くすべてを出力します"'!+アトムをcharに設定し"ます。 Oそれを出力し、プログラムを終了するアトムを破壊します。

反転したバージョンはR再びHello, World設定され、各文字のアトムを開始し、アトム!を破壊せずに出力します。最後のキャラクターの場合!、プリントOはアトムを破壊します。



0

Python 2、131バイト

転送:

print(lambda x:x+repr(x)+")#'!dlroW ,olleH' tnirp")('print(lambda x:x+repr(x)+")#\'!dlroW ,olleH\' tnirp")(')#'!dlroW ,olleH' tnirp

逆:

print 'Hello, World!'#)'()"print '\Hello, World!'\#)"+)x(rper+x:x adbmal(tnirp'()"print 'Hello, World!'#)"+)x(rper+x:x adbmal(tnirp

前半は1行のクインであり、その後に#前半を単純な後半から分離するコメントが形成されます。


適応このPythonのQUINEすることはできます_='_=%r;print _%%_#"!dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
SP3000

0

C、108バイト

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}//};)"!dlroW ,olleH"(stup{)(niam

C99と思う?
ニール

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