バックグラウンド
最もPPCGの常連が知っているように、QUINEが実行したときに、独自のソースコードを出力するプログラムです。2つの文字列間のレーベンシュタイン距離は、1つの文字列を別の文字列に変更するために必要な挿入、削除、および編集の最小数です。この課題では、2つの概念を「レベンキン」に組み合わせます。独自のソースコードを出力するプログラムですが、1つの文字の1つのインスタンスを挿入、削除、または別の文字に置き換えます。(つまり、プログラムとその出力の間のレーベンシュタイン距離は1です。)
タスク
その出力がレベンキンであるように、そのプログラムの出力もレベンキンであるように、レベンキンを書きます。さらに、ある時点で、プログラムの繰り返し実行、その出力の実行、その出力の出力の実行などのシーケンスは、最終的に元のプログラムに戻らなければなりません。
物事をより難しくする1つの追加の制限があります:このサイクル内のどこかに、共通の文字を持たない2つの異なるプログラムが必要です(つまり、1つのプログラム内に存在し、他のプログラム内にも存在する文字はありません)。したがって、プログラムは徐々に自分自身を別の文字セットに変換し、再び元に戻す必要があります。
出力を生成するプログラムに必要な避けられない定型文を含むプログラミング言語を使用している場合(たとえば、print
文を書く方法が1つしかなく、他の有用な出力形式がない場合)、その定型文を目的のために存在しないものとして扱うことができます2つのプログラムに共通する文字を決定する。ただし、コードのレベンキンプロパティを決定するために、その定型文を引き続きカウントする必要があります。
明確化
- サイクル内の各「プログラム」は、完全なプログラムまたは機能のいずれかです。それらはすべて同じである必要はありません。たとえば、一部は完全なプログラムであり、一部は機能である可能性があります。
- サイクル内のすべてのプログラムが同じ形式の出力を使用する必要があるわけではありません。たとえば、一部は標準出力を介して出力でき、一部は標準エラーを介して出力できます。
- プログラムは、入力なしで(または、入力をまったく必要としない言語で、最も単純な入力で)実行されます。
- 適切なクインルールが適用されます。Levenquineは真のクインではありませんが、適切なクインを書くときに違法となるようなことはできません。特に、nullプログラムは適切なLevenquineからの有効な出力になることはありません(したがって、サイクルの一部になることはできません)。
- Levenquineの制限は、バイト単位ではなく文字単位で測定されます(たとえば
ê
、ソースがUTF-8でエンコードされている場合でも1文字です)。非共通文字制限は、文字の観点からも測定されます。ただし、勝利条件はバイト単位でカウントされます。
勝利条件
サイクルから少なくとも次の3つのプログラムを提出してください。最短のプログラム(バイト単位)。共通の文字を持たないサイクルの2つのプログラム。これらのうち2つが同じである可能性があり、3つすべてが異なる可能性もあります。スコアは最短プログラムのバイト単位の長さに基づいており、短いほど良いため、これは一種のコードゴルフの競争になります。