QuineRelay: クワインの蛇の誕生

Aug 07, 2024 pm 10:30 PM

Quine ブログ シリーズの前回の冒険では、独自の Quine とイントロンを記述する方法を検討しました。今日は、QuineRelay とは何か、そして Intron を活用して QuineRelay を作成する方法を見ていきます。

それぞれが異なる言語で書かれた一連のプログラムを想像してください。このサークル内の各プログラムには、シーケンス内の次のプログラムのソース コードを出力するという 1 つの目的があります。最後のプログラムは、最初のプログラムのソース コードを出力してループを閉じます。

本質的に、QuineRelay は、次のような n 個の異なる言語で作られた n 個のプログラムのセットです:

  • 各プログラムは次のプログラムのソースを出力します。
  • 最後のプログラムは最初のプログラムのソースを出力します。 ここで循環リンクリストについて考えてみましょう。最後の例は驚くべきものです!

概念をよりよく理解するためにいくつかの例を見てみましょう。


2次リレー

この 2 次 QuineRelay は、Python プログラムを出力し、元の JavaScript プログラムを出力する JavaScript プログラムを備えています。それは自己複製のダイナミックなデュオです。
JavaScript → Python ⥀

JavaScript: オンラインで試してみましょう!

リーリー

Python: オンラインで試してみましょう!

リーリー

3次リレー

3 次 QuineRelay を使用すると、物事はさらに面白くなります。これは Haskell プログラムで始まり、Python プログラムが出力され、Python プログラムが Ruby プログラムを出力し、最後に Ruby プログラムは元の Haskell プログラムにループバックします。
Haskell → Python2 → Ruby ⥀

Haskell: オンラインで試してみましょう!

リーリー

Python2: オンラインで試してみましょう!

リーリー

ルビー: オンラインで試してみましょう!

リーリー

4次リレー

これは 4 次 QuineRelay です: Ruby → Java → C# → Python ⥀
GitHub


文化を超えて、共通の象徴性がいくつかあります。そのうちの 1 つはウロボロスで、エジプト、ギリシャ、ローマ、ヒンズー教、シベリア、北欧、アフリカ、南米の神話に言及しています。ウロボロスは、自分の尾を食い荒らす蛇や龍を描いた古代のシンボルで、創造と破壊の永遠のサイクルを表しています。

QuineRelay: Birth of the Quine serpent

北欧神話では、ヨルムンガンドはロキと巨人娘アングルボザの中間子である巨大な蛇です。オーディンはヨルムンガンドをミズガルズ (人間の領域) を取り囲む海に投げ込み、そこで蛇は非常に巨大になり、世界を取り囲み、自らの尾を掴みました。ミッドガルド(地球)を取り囲んでいるため、世界蛇・ウロボロスと呼ばれています。ヨルムンガンドが尻尾を放つのは、ラグナロク(世界最後の戦い)の始まりの兆しの一つです

クワインリレーはこの象徴性を非常にうまく体現しており、サイクル内の各プログラムが次のプログラムを生み出し、最後には生まれ変わるだけであるため、ウロボロス プログラムという愛称が付けられています。


128次ウロボロスリレー

席に座ってください。こちらは128次のウロボロス・クワインリレーです。はい、そのとおりです。 128!!!

Ruby → Rust → Scala → ... (他 120) ... → Python → R → Ratfor → rc → REXX ⥀
GitHub

QuineRelay: Birth of the Quine serpent

これだけでは十分ではないかのように、イースターエッグが含まれています。ズームアウトした元の Ruby コードにはウロボロスのドラゴンが含まれています!

QuineRelay: Birth of the Quine serpent


独自の QuineRelay を作成する

以前に書いた Python イントロンを開始して、それを 2 次 QuineRelay に変えてみましょう。

Python Intron: オンラインで試してみましょう!


リーリー

イントロンの魔法を使用して、異なる言語の兄弟 Quine の

コード 部分をイントロンに簡単に挿入できるようになりました。次の形式のプログラムを作成します:

パイソン:


リーリー

ので、各変数は、異なる Quine の

データ として機能するだけです。データとイントロンの名前をそれぞれ d1 と d2 に変更しましょう。

パイソン:


リーリー

さて、d2 はイントロンとして機能しますが、上記のプログラムは依然として self のコード部分を出力しようとしました。次のソースを出力させるには、最後に print(d1) の代わりに print(d2) を付けましょう。

パイソン:

リーリー
d1 の内容が 3 行目の単なるコピーであることはすでにわかっています。しかし、d2 の内容はまだありません。

たとえば、JavaScript を使用して QuineRelay を作成したいとします。同様のイントロンをJSで書いてみましょう

JavaScript:

リーリー
さて、上記の JS イントロンの 3 行目は、私たちが望んでいた兄弟プログラムの

コード

です! お互いのコード
を相手のイントロンとして貼り付けます。 注記。引用符の不一致を避けるために、js に d1 + '' を追加する必要があります

Python: Try it online!

d1 = "print('d1 =', repr(d1)); print('d2 =', repr(d2)); print(d2)"
d2 = "console.log(`d1 = ${JSON.stringify(d1)}`); console.log(`d2 = ${JSON.stringify(d2)}`); console.log(d1 + '');"
print('d1 =', repr(d1)); print('d2 =', repr(d2)); print(d2)
ログイン後にコピー

JavaScript: Try it online!

d1 = "print('d1 =', repr(d1)); print('d2 =', repr(d2)); print(d2)"
d2 = "console.log(`d1 = ${JSON.stringify(d1)}`); console.log(`d2 = ${JSON.stringify(d2)}`); console.log(d1 + '');"
console.log(`d1 = ${JSON.stringify(d1)}`); console.log(`d2 = ${JSON.stringify(d2)}`); console.log(d1 + '');
ログイン後にコピー

There you go. It's a proper 2nd order QuineRelay! A Python program, that prints a JavaScript program, that prints the original Python program back in a cycle.


Creating a QuineRelay is an exercise in creative coding and understanding how different languages represent and manipulate strings. It involves weaving together introns from various programs, each containing the code to replicate its next neighbour.

At its core, an nth-order relay is a game of n clever ways to escape quotes across n programming languages.

Stay tuned for the next post on MultiQuine!


Sources and references:

  • Ouroboros programs, wiki page.
  • A Third Order Quine in Three Languages, blog by sigfpe.
  • Chain Quine, GitHub repo by Ibragimov Ruslan.
  • 128 Quine Relay, GitHub repo by Yusuke Endoh.
  • QuineRelay: Birth of the Quine serpent, self-referencing blog where a word in each n-order example hyperlinks to the next, cyclically. (May not work in dev.to; checkout the canonical blog)
  • Jörmungandr, wiki page.
  • Ouroboros, wiki page.
  • Art of Code, talk by Dylan Beattie

以上がQuineRelay: クワインの蛇の誕生の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Apr 02, 2025 am 07:03 AM

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。

Python 3.6のロードピクルスファイルエラーmodulenotfounderror:ピクルスファイル「__builtin__」をロードした場合はどうすればよいですか? Python 3.6のロードピクルスファイルエラーmodulenotfounderror:ピクルスファイル「__builtin__」をロードした場合はどうすればよいですか? Apr 02, 2025 am 06:27 AM

Python 3.6のピクルスファイルの読み込みエラー:modulenotfounderror:nomodulenamed ...

Scapy Crawlerを使用するときにパイプラインファイルを書き込めない理由は何ですか? Scapy Crawlerを使用するときにパイプラインファイルを書き込めない理由は何ですか? Apr 02, 2025 am 06:45 AM

SCAPYクローラーを使用するときにパイプラインファイルを作成できない理由についての議論は、SCAPYクローラーを学習して永続的なデータストレージに使用するときに、パイプラインファイルに遭遇する可能性があります...

See all articles