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 / 0
ist die Unendlichkeit)
number of times the program almost quines
Gibt 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 1
haben und dann 1
erneut hinzufügen , number of times the program almost quines
hö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 2
oder entfernen.
Antworten:
CJam, 0,000884
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:
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,648
6-Byte-UTF-8-Zeichen und die Länge des Originalcodes beträgt 39, die Punktzahl also39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806
.Wie es funktioniert
quelle
CJam, 46 Bytes, 65504 add, 65505 del, Score 0.127424
Teste es hier.
Die Grundform ist eine standardmäßige generalisierte CJam-Quine. Zu "fast quine" gibt es einen Kommentar
e#
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.quelle
CJam, 19 Bytes, 65536 add, 0 del, Score 0.074219
Einfacher ist besser.
quelle