ほとんど馬を作る


12

私は彼に与えることによって、友人をだますしたいQUINEことはほとんど働いていたが、しかしsloppierとsloppierになりました。

実行すると、プログラムを出力しますが、1文字オフになるプログラムを作成します。1つの文字を追加、削除、または両方することができます(1文字変更)。ただし、1文字のみです。

あなたのスコアは(length of your program) / floor(sqrt(number of times the program almost quines))/ 0無限はどこにあります)

number of times the program almost quinesstdoutで1文字のみを変更しながらプログラムを実行する回数です。プログラムが入力を受け付けない場合があります。また、既に印刷したプログラムを印刷しない場合があります。

以前に追加した文字を追加したり、同じインデックスから文字を削除したりすることもできません。たとえば、1以前に追加1したことがあり、再度追加した場合、そこでnumber of times the program almost quines停止します。最初の文字を削除する場合、最初の文字を再度削除することはできません。3番目の文字をに変更した場合、3番目の文字を2追加2または削除することはできません。


馬は何ですか?
Abr001am

@ Agawa001 A QUINE自体を出力するプログラムです。

回答:


7

CJam、0.000884

{_,6/[{64md}6*](124+\+'�f++`"1$~"}""1$~

ここで、 はコードポイント128の印刷できない文字を示します。オンラインで試してください。

考え

このアプローチは、コードブロックに続く最初の空の文字列に、U + 4000000〜U + 7FFFFFFFのコードポイントを持つすべてのUCS文字(元の仕様)を追加します。

次のように6バイトの文字列を使用してこれらの各文字をエンコードするUTF-8を選択します。

1111110u₂     10vvvvvv₂     10wwwwww₂     10xxxxxx₂     10yyyyyy₂     10zzzzzz₂

252 + u       128 + vvvvvv  128 + wwwwww  128 + xxxxxx  128 + yyyyyy  128 + zzzzzz

したがって、base 64の下位6桁を計算し、252を最上位に、128を残りの桁に追加することにより、この範囲のn番目の文字をエンコードできます。

得点

あり2 ** 31 = 2,147,483,6486バイトのUTF-8文字は、スコアがあるので、元のコードの長さは、39です39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806

使い方

{                                }""    e# Push the code block and an empty string.
                                    1$~ e# Execute a copy of the code block.
 _,                                     e# Push the length of the string.
   6/                                   e# Divide by 6 to get the number of chars.
      {64md}6*                          e# Perform modular division six times.
     [        ]                         e# Collect the results in an array.
               (124+\+                  e# Add 124 to the first element.
                      '�f+              e# Add 128 to all and cast each to Char.
                          +             e# Concatenate the strings.
                           `            e# Push a string representation.
                            "1$~"       e# Push '1$~' to complete the quine.

あなたの最初の(より低い)スコアのため、私はこれを受け入れています。許可します。

6

CJam、46バイト、65504加算、65505 del、スコア0.127424

{`-2<_0c#)!{'#/~(_)\+\+S+]'#*}*W<"
}_~"e# 
}_~

ここでテストしてください。

基本的な形式は、標準の一般化されたCJamクインです。「ほぼクイン」にe#は、クインのブロックの最後にコメントがあり、コードに影響を与えることなく自由に文字を追加できます。コメントには最初に1つのスペースが含まれていることに注意してください。

プログラムはコメントの先頭に文字を追加し続け!、ASCII値から順番に進みます。CJamの文字コードは2 16の後にラップアラウンドするため、ある時点でヌルバイトが追加されます。それが起こると、コメントが空になるまで、プログラムはコメントの末尾からバイトを削除し始めます(削除された文字の位置が常に異なるように)。


5

CJam、19バイト、65536加算、0 del、スコア0.074219

"a"{\)_)++`\"_~"}_~

シンプルな方が良いです。

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