Hintergrund
Wie die meisten PPCG-Stammgäste wissen, ist ein Quine ein Programm, das beim Ausführen seinen eigenen Quellcode ausgibt. und der Levenshtein-Abstand zwischen zwei Zeichenfolgen ist die minimale Anzahl von Einfügungen, Löschungen und Bearbeitungen, die erforderlich sind, um eine Zeichenfolge in die andere zu ändern. In dieser Herausforderung kombinieren wir die beiden Konzepte zu einer "Levenquine": einem Programm, das seinen eigenen Quellcode ausgibt, wobei jedoch eine Instanz eines Zeichens eingefügt, gelöscht oder durch ein anderes Zeichen ersetzt wird. (Mit anderen Worten, der Levenshtein-Abstand zwischen dem Programm und seiner Ausgabe beträgt 1.)
Die Aufgabe
Schreiben Sie eine Levenquine so, dass ihre Ausgabe eine Levenquine ist. Die Ausgabe dieses Programms ist auch eine Levenquine und so weiter. Außerdem muss irgendwann die Sequenz des wiederholten Ausführens des Programms, des Ausführens seiner Ausgabe, des Ausführens seiner Ausgabe usw. zum ursprünglichen Programm zurückkehren.
Es gibt eine zusätzliche Einschränkung, die die Dinge erheblich erschwert: Es muss irgendwo in diesem Zyklus zwei verschiedene Programme geben, die keine gemeinsamen Zeichen haben (mit anderen Worten, es gibt kein Zeichen, das in einem Programm existiert und auch in dem anderen Programm existiert). Ihr Programm muss sich daher allmählich in einen anderen Zeichensatz verwandeln und wieder zurück.
Wenn Sie eine Programmiersprache mit unvermeidbarem Boilerplate verwenden, das in jedem Programm, das eine Ausgabe erzeugt, erforderlich ist (z. B. es gibt nur eine Möglichkeit, eine print
Anweisung zu schreiben , und keine anderen nützlichen Ausgabeformen), können Sie dieses Boilerplate für diesen Zweck als nicht vorhanden behandeln zu bestimmen, welche Zeichen zwei Programme gemeinsam haben. Sie müssen dieses Boilerplate jedoch weiterhin zählen, um die Levenquine-Eigenschaft des Codes zu bestimmen.
Klarstellungen
- Jedes der "Programme" im Zyklus kann entweder ein vollständiges Programm oder eine Funktion sein. Sie müssen nicht alle gleich sein, z. B. könnten einige vollständige Programme und einige Funktionen sein.
- Nicht alle Programme im Zyklus müssen dieselbe Ausgabeform verwenden. Einige können beispielsweise über die Standardausgabe ausgegeben werden, andere über Standardfehler.
- Ihre Programme werden ohne Eingabe ausgeführt (oder in Sprachen, die Eingaben erfordern, um überhaupt etwas zu tun, die einfachstmögliche Eingabe).
- Es gelten die entsprechenden Regeln . Obwohl eine Levenquine keine echte Quine ist, darfst du nichts tun, was illegal wäre, wenn du eine richtige Quine schreibst. Insbesondere ist das Nullprogramm niemals eine gültige Ausgabe von einer richtigen Levenquine (und kann daher nicht Teil Ihres Zyklus sein).
- Die Levenquine-Beschränkung wird in Zeichen anstatt in Bytes gemessen (z. B.
ê
ist ein Zeichen, auch wenn die Quelle in UTF-8 codiert ist). Die Beschränkung "Keine gemeinsamen Zeichen" wird auch in Zeichen gemessen. Die Siegbedingung zählt jedoch in Bytes.
Siegbedingung
Bitte reichen Sie mindestens die folgenden drei Programme aus dem Zyklus ein: das kürzeste Programm (gemessen in Bytes); und zwei Programme aus dem Zyklus, die keine gemeinsamen Zeichen haben. Es ist möglich, dass zwei davon gleich sind, und es ist auch möglich, dass alle drei verschieden sind. Die Punktzahl basiert auf der Länge des kürzesten Programms in Bytes, wobei die kürzere Länge besser ist, wodurch dies zu einer Art Code-Golf- Wettbewerb wird.