2

数年前、独自のソース コードを出力するプログラムを作成する方法を考えていたときに、次の 2 つの方法を思いつきました。

  • プログラムは、実行可能ファイル名に基づいて .c または .cpp ファイルを出力します (app1 は app1.cpp を出力します)。ただし、.cpp ファイルが別の場所にある場合、これは失敗します。
  • プログラムは文字列を「巧妙に」使用し (このソースコードは忘れました)、それ自体を出力します。

プログラムが独自のソース コードを印刷するために使用できる他のアルゴリズムはありますか?

4

4 に答える 4

2

あなたの2つのケースはすべてのオプションをカバーしていると思います。ケース(1)は、「外部デバイスからプログラムソースをロードする」という形式のケースをカバーし、ケース(2)は、「プログラムでプログラムソースを生成する」という形式のケースをカバーします。もちろん、「ファイルからプログラムの前半を読み取り、プログラムで後半を生成する」などのハイブリッドアプローチを検討することもできますが、これは上記の説明と何ら変わりはありません。

于 2011-08-22T08:47:46.070 に答える
2

Steve がコメントで指摘したように、ケース 1) は通常、クワインとは見なされません。おそらく、ファイル I/O を実行できる言語で実行するのは本質的に簡単だからです。

ケース 2) は、ほとんどの人が quine と言うときに意味するものであり、'弦の巧妙な使用' が誇示されている部分です。

一部の言語では、3 番目のケースがあります (これも、ケース 1 よりもさらに些細なことであるため、通常は真のクワインとしてカウントされません)。言語がステートメントをまったく含まないプログラムを適切に形成できる場合、この「空の」プログラムは通常何も出力しません。これはもちろんソース コードと同じです。たとえば、TCL スクリプト:

印刷されます:

;)

于 2011-08-22T09:37:42.333 に答える
0

プログラムは特定の「名前」を持つ「実行可能」である必要はなく、ソースコードは特定の「名前」を持つ「ファイル」にある必要はありません。これらはすべて最新のオペレーティングシステムの成果物であり、目前の仕事とはまったく関係がありません。

于 2011-08-22T09:14:45.210 に答える
0
 char*f="char*f=%c%s%c;main()
 {printf(f,34,f,34,10);}%c";
 main(){printf(f,34,f,34,10);}

(一行で)

このような多くのコードが http://www.nyx.net/~gthompso/quine.htmにあります

私にはこれが最善の方法です。コードを変数に割り当てて、繰り返し使用します。

于 2011-08-23T14:41:48.240 に答える