変異硬化したクイン


14

あなたの仕事は、独自のソースを印刷するプログラムを作成することです。

「ねえ、私たちはすでにこの挑戦と、それのトンのバリエーションを持っています!なぜあなたは別のものを作っているのですか?」質問するかもしれませんが、これは最も難しいものの1つになります(とにかく)。

あなたのウマは「突然変異に強く」されている必要があります。それは、その文字のいずれかが適切に複製されていても、ウマは元のプログラムのソースコードを出力しなければならないことを意味します。

たとえば、あなたが馬を持っている場合(次の例はどの言語でも書かれておらず、単なる擬似コードです):

abcd

これらのプログラムはすべて出力する必要がありますabcd

aabcd
abbcd
abccd
abcdd

(これらのプログラムのそれぞれで、abcおよびd各重複文字が元の文字の直後に配置したことを意味する、その場で複製されます。)

ルール:

  • 標準のクインルールが適用されます。
  • マルチバイト文字は1文字としてカウントされ、複製された文字はそれぞれのバイトに「分割」されません。

これはなので、バイト単位の最短コードが勝ちです!


これはカウントされますか?0そして00CJamでは両方の出力0
-geokavel

いいえ、0適切な馬ではありません。
デニス

2
私はそれが同じくらい興味深いものになるだろうと思うのコード・ボーリング
氏Xcoder

一般に、コード突然変異の問題は解決可能ですか?引用符で囲まれた文字列内の文字に突然変異が発生しない限り、通常はプログラムが破損します。
長谷

タイトルは少し誤解を招くものではありませんか?「突然変異」は、キャラクターを変えるのではなく、それを繰り返すことを提案します
ルイスメンドー

回答:


18

> <>、56バイト

^
.
+
8
f
0
o
a
o
~
:
?
~
:
?
:
-
*
4
8
:
^
^
}
*
3
d
'

オンラインでお試しください!または、すべての突然変異を検証します

元のプログラムの仕組み(時代遅れ)

インタープリターはcell (0、0)で始まります。^方向を上向きに設定するため、命令ポインター(IP)はセル 0、20)に回り込みます。

'文字列モードをアクティブにします。次の文字が見つかるまで'、IPの下のすべての文字がスタックにプッシュされます。'ラップアラウンド後に同じことが再び見つかるので、プッシュします

d3*}^^:84*=?~oao0f.^

IPは 0、19)で着陸しますが、まだ上向きです。d3*}プッシュ13 = 0xdを実行してから3を実行すると、両方の値が乗算され(39 / 単一引用符)、スタックが右に回転します。これにより、スタックは次のようになります。

'd3*}^^:84*=?~oao0f.^

次の2つの命令(^)は、この時点では何もしません。

:84*=スタックの最上部を複製し、84をプッシュしてそれらを乗算(32 / スペース)し、スペースとの等価性について複製された文字をテストします。変更されていないプログラムの場合、これは常に0をプッシュします

?スタックの最上部が偽である場合、次の命令をスキップします。元のプログラムで~は常にそうであるため、常にスキップされます。

oaoポップとスタックの上部を出力し、押圧10 / 改行は、ポップと印刷改行

最後0f.にセル 0、15 ^)(一番下)にジャンプし、スタックの次の文字からやり直します。

スタックが空になると、ソースコード全体が印刷されます。:失敗し、プログラムは終了します。

変異したプログラムの仕組み(時代遅れ)

改行以外の文字を複製すると、プログラムは水平方向にのみ拡張されます。プログラムは垂直に実行されるため、これらの追加の命令は実行されません。

bottomostする前に改行を複製する^細胞シフトする(0、14)及び(0、15)(0、15)及び(0、16) 0f.は、一番下のセルにもジャンプするようになります。これ^もである^ため、プログラムはシフトの影響を受けません。

最後に、重複する改行文字も文字列を変更します。短い行にはスペースが埋め込まれるため、32 / スペースが改行の位置に挿入されます。スペースのために184*=プッシュするので、次の命令をスキップしません。この場合は、ポップや破棄スペース、以下のように、上の文字印刷された空間を代わりに。?~o


任意の改行を複製できますが、引き続き機能します。
デニス

3
ああ、私は投稿をきちんと読んでいませんでした:P(
ダミットデニス


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