Machen Sie eine fast quine

12

Ich wollte einen Freund zum Narren halten, indem ich ihm eine Quine gab , die fast funktionierte, aber immer schlampiger wurde.

Erstellen Sie ein Programm, das beim Ausführen das Programm ausgibt, jedoch nur ein Zeichen davon entfernt ist. Es kann entweder ein Zeichen hinzugefügt, entfernt oder beides (ein Zeichen ändert sich). Aber nur ein Charakter.

Ihre Punktzahl wird sein (length of your program) / floor(sqrt(number of times the program almost quines))(Wo / 0ist die Unendlichkeit)

number of times the program almost quinesGibt an, wie oft Ihr Programm ausgeführt wird, während nur ein Zeichen in stdout geändert wird. Ihr Programm akzeptiert möglicherweise keine Eingaben. Möglicherweise wird auch kein bereits gedrucktes Programm gedruckt.

Sie können auch kein zuvor hinzugefügtes Zeichen hinzufügen oder ein Zeichen aus demselben Index entfernen. Wenn Sie zum Beispiel zuvor hinzugefügt 1haben und dann 1erneut hinzufügen , number of times the program almost quineshört das hier auf. Wenn Sie das erste Zeichen entfernen, können Sie das erste Zeichen nicht erneut entfernen. Wenn Sie das dritte Zeichen in ein geändert haben 2, können Sie das dritte Zeichen möglicherweise nicht hinzufügen 2oder entfernen.

mbomb007
quelle
Was ist ein Quine?
4.
@ Agawa001 Ein Quine ist ein Programm, das sich selbst druckt.

Antworten:

7

CJam, 0,000884

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

Hier bezeichnet das nicht druckbare Zeichen mit dem Codepunkt 128. Versuchen Sie es online.

Idee

Bei diesem Ansatz werden alle BKS-Zeichen (ursprüngliche Spezifikation) mit Codepunkten zwischen U + 4000000 und U + 7FFFFFFF an die anfangs leere Zeichenfolge angehängt, die auf den Codeblock folgt.

Wir wählen UTF-8 , das jedes dieser Zeichen mit einer 6-Byte-Zeichenfolge wie folgt codiert:

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

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

Somit können wir das n-te Zeichen in diesem Bereich codieren , indem wir seine 6 niedrigstwertigen Stellen in der Basis 64 berechnen und 252 zu den höchstwertigen und 128 zu den verbleibenden addieren.

Wertung

Es gibt 2 ** 31 = 2,147,483,6486-Byte-UTF-8-Zeichen und die Länge des Originalcodes beträgt 39, die Punktzahl also 39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806.

Wie es funktioniert

{                                }""    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.
Dennis
quelle
Ich akzeptiere dies aufgrund Ihrer ersten (niedrigeren) Punktzahl. Ich werde es zulassen.
6

CJam, 46 Bytes, 65504 add, 65505 del, Score 0.127424

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

Teste es hier.

Die Grundform ist eine standardmäßige generalisierte CJam-Quine. Zu "fast quine" gibt es einen Kommentare# am Ende des Quine-Blocks, in dem ich Zeichen hinzufügen kann, ohne den Code zu beeinflussen. Beachten Sie, dass der Kommentar zunächst ein einzelnes Leerzeichen enthält.

Das Programm fügt weitere Zeichen vor dem Kommentar ein, beginnend mit !und dann in der Reihenfolge des ASCII-Werts. Die Zeichencodes von CJam werden nach 2 16 umbrochen, sodass irgendwann ein Null-Byte hinzugefügt wird. Sobald dies geschieht, beginnt das Programm, Bytes vom Ende des Kommentars zu entfernen (so dass die Position des entfernten Zeichens immer anders ist), bis der Kommentar leer ist.

Martin Ender
quelle
5

CJam, 19 Bytes, 65536 add, 0 del, Score 0.074219

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

Einfacher ist besser.

jimmy23013
quelle