サイクリックレーベンキン


45

バックグラウンド

最もPPCGの常連が知っているように、実行したときに、独自のソースコードを出力するプログラムです。2つの文字列間のレーベンシュタイン距離は、1つの文字列を別の文字列に変更するために必要な挿入、削除、および編集の最小数です。この課題では、2つの概念を「レベンキン」に組み合わせます。独自のソースコードを出力するプログラムですが、1つの文字の1つのインスタンスを挿入、削除、または別の文字に置き換えます。(つまり、プログラムとその出力の間のレーベンシュタイン距離は1です。)

タスク

その出力がレベンキンであるように、そのプログラムの出力もレベンキンであるように、レベンキンを書きます。さらに、ある時点で、プログラムの繰り返し実行、その出力の実行、その出力の出力の実行などのシーケンスは、最終的に元のプログラムに戻らなければなりません。

物事をより難しくする1つの追加の制限があります:このサイクル内のどこかに、共通の文字を持たない2つの異なるプログラムが必要です(つまり、1つのプログラム内に存在し、他のプログラム内にも存在する文字はありません)。したがって、プログラムは徐々に自分自身を別の文字セットに変換し、再び元に戻す必要があります。

出力を生成するプログラムに必要な避けられない定型文を含むプログラミング言語を使用している場合(たとえば、print文を書く方法が1つしかなく、他の有用な出力形式がない場合)、その定型文を目的のために存在しないものとして扱うことができます2つのプログラムに共通する文字を決定する。ただし、コードのレベンキンプロパティを決定するために、その定型文を引き続きカウントする必要があります。

明確化

  • サイクル内の各「プログラム」は、完全なプログラムまたは機能のいずれかです。それらはすべて同じである必要はありません。たとえば、一部は完全なプログラムであり、一部は機能である可能性があります。
  • サイクル内のすべてのプログラムが同じ形式の出力を使用する必要があるわけではありません。たとえば、一部は標準出力を介して出力でき、一部は標準エラーを介して出力できます。
  • プログラムは、入力なしで(または、入力をまったく必要としない言語で、最も単純な入力で)実行されます。
  • 適切なクインルールが適用されます。Levenquineは真のクインではありませんが、適切なクインを書くときに違法となるようなことはできません。特に、nullプログラムは適切なLevenquineからの有効な出力になることはありません(したがって、サイクルの一部になることはできません)。
  • Levenquineの制限は、バイト単位ではなく文字単位で測定されます(たとえばê、ソースがUTF-8でエンコードされている場合でも1文字です)。非共通文字制限は、文字の観点からも測定されます。ただし、勝利条件はバイト単位でカウントされます。

勝利条件

サイクルから少なくとも次の3つのプログラムを提出してください。最短のプログラム(バイト単位)。共通の文字を持たないサイクルの2つのプログラム。これらのうち2つが同じである可能性があり、3つすべてが異なる可能性もあります。スコアは最短プログラムのバイト単位の長さに基づいており、短いほど良いため、これは一種の競争になります。


削除された投稿を閲覧できるユーザーの場合:Sandboxの投稿はこちらにあります

また、回答にサイクルの長さを含めることも良いと思います。
mbomb007

たとえば、言語に出力を実行するためのいくつかの機能があり、それらはすべてペアワイズで文字を共有している場合
Ørjanヨハンセン

2
@ØrjanJohansen:そのうちの1つを選んでそれを使い続けることに反対することはないでしょう。ただし、ほぼ間違いなく競合していません。ルールを客観的にしたかったのです。さもないと、人々は抜け穴を突く傾向があり、ルールを複雑にしようとすると、その意味をめぐる議論が生じる傾向があります。

それはビットごとにレベンキンになることができますか?元のソースコードからの距離のように1バイトオフですか?
魔法のタコUr

回答:


34

Gol> <>252 167バイト

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_

オンラインでお試しください!

そして、相互に異なる(検証)プログラム:

0<CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

オンラインでお試しください!

これは主に、相互排他的なクイン課題への私の答えからインスピレーションを得ており、称賛もバブラーのゴル> <>回答に行きます

実行できる検証プログラムは次のとおりです。残念ながらタイムアウトになりますが、コードの1つのセクションが他のセクションをどのように構築するかを見ることができます。その後、印刷された最後のバージョンをコピーし、入力に貼り付けて続行できます。最終的には、最初に入れたプログラムに到達します。

説明

コードの両方のセクションは、実際の実行部分とコードの他のセクションを含むデータの2つのセクションで構成されています。これらは両方とも実質的に同じように機能します。

それらはフラグ(コードの最初の文字、1または0)に依存します。フラグが設定されている場合は、252番目の文字を削除し28、そこから追加/減算してコードに追加することにより、コードの他のセクションの構築を開始します。

たとえば、上記の最初のプログラムの後のコードの最初の2つの反復は次のとおりです。

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_C

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽ

それは、現在のセクションの最後に到達したとき、最終的に、それはコードの2番目の文字(反転<>他の部分を指すようにし、再び)を。

ここに両方の​​セクションがあり、最初のセクションの実行から2番目のセクションの実行に切り替えます。

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

オンラインでお試しください!

フラグは各セクションの反対であるため、新しく実行されるセクションは、コードの他のセクションの削除を開始し、それが独自のコードに到達するまで続けます。この時点で、フラグが反転し、サイクルが再び繰り返されます。

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