Ein strahlungsgehärtetes Programm ist ein Programm, bei dem, wenn ein Zeichen des Codes entfernt wird, das Programm immer noch dasselbe funktioniert. Für diese Frage schreiben wir ein Programm, das erkennt, wann es bestrahlt wird.
Schreiben Sie ein Programm oder eine Funktion, die beim Entfernen eines einzelnen Bytes dieses Byte und nur dieses Byte ausgibt. ( Sie können dieses Byte mehrmals ausgeben, solange Sie kein anderes Byte ausgeben. )
Regeln:
- Das Programm muss mindestens 2 verschiedene Bytes enthalten. (Keine Lösungen von nur 0s;)
- Es ist egal, was das ursprüngliche Programm macht
- Kein Lesen Ihres eigenen Quellcodes.
- Der Code wird anhand der Anzahl der unterschiedlichen Bytes bewertet, bei denen der höchste Betrag gewinnt. Zum Beispiel,
abc
= 3 Punkte,ababba
= 2 Punkte,abc
gewinnt.- Tie-Breaker ist die kleinere Byteanzahl, gefolgt von der früheren Übermittlungszeit
Viel Glück!
code-challenge
radiation-hardening
Scherzen
quelle
quelle
Antworten:
05AB1E ,
97 Bytes (Ergebnis von 3)Probieren Sie es online!
A. Entfernen
'
Wenn eine
'
entfernt wird,22''rr
ist 22 die erste Sache auf dem Stapel und eine'
letzte Sache auf dem Stapel, was bei zweimaliger Umkehrung zur Folge hat'
.Entfernen eines
r
Wenn eine
r
entfernt wird, ist22'''r
22 die erste Sache auf dem Stapel, eine'
zweite Sache auf dem Stapel und einer
letzte Sache auf dem Stapel. Diesemr
ging jedoch ein vorangestelltes Zeichen voraus'
, das es zur Literalzeichenfolge"r"
(im Gegensatz zum Befehlreverse stack
) macht, die implizit gedruckt wird.A. Entfernen
2
Wenn etwas
2
entfernt wird,2'''rr
ist2
es das Erste auf dem Stapel,'
das Zweite auf dem Stapel und schließlichr
das Letzte auf dem Stapel, was, wenn es einmal umgekehrt wird, zur Folge hat2
.Daher ist diese Antwort gültig. Wenn nichts entfernt ist, gibt es etwas aus
'
, was irrelevant ist. Dies funktioniert auch für eine andere Nummer als 2.Erstellt eine Gültigkeitsprüfung, mit der Sie in 05AB1E * antreten können.
* Ich bin mir nicht hundertprozentig sicher, wie viele Lösungen in 05AB1E überhaupt möglich sind ...
Gültigere Lösungen, die schlechter oder gleich sind
'
über 2 wird funktionieren ...'''''''VV
,'''''''XX
oder'''''''<any command that pops a without pushing>x2
'
über 3, gefolgt von einer geraden Anzahl vons
über 1 (EG'''''''''ssss
).'''..
mit einer beliebigen Anzahl von Perioden über 1 und einer beliebigen ungeraden Anzahl von Perioden'
über 2.'\\'''rr
- gleiche Idee wie22'''rr
aber\
wird ‚entfernen letzten Stapel Punkt‘.quelle
'
Wie Sie sagen, ist die normale Ausgabe von für die Regeln irrelevant. Aber es macht das nominelle Ziel der Aufdeckung von Anomalien ungültig, was ein bisschen lustig ist.Brainfuck, Score 3
Ist möglicherweise nicht konkurrierend, da die Ausgabe nur über einen Speicherauszug angezeigt wird.
Angenommen, die Eingabe ist leer und EOF lässt die Zelle unverändert. Verwendet einen Interpreter, der den Speicher auf einen Ausgang wie diesen kopiert .
Entfernen Sie ein Pluszeichen und der Speicher ist der Unicode-Wert für "+", ansonsten der Unicode-Wert für ",". Es ist jedoch eher eine Regel als eine Antwort. So ziemlich das gleiche mit "-". Missbrauch der Tatsache, dass diese drei Zeichen im Unicode-Zeichensatz nacheinander stehen.
quelle
Ein Birnbaum, 256 verschiedene Bytes, 975 Bytes
Leider erfordert die Frage so ziemlich eine optimale Lösung, um irgendwo ein NUL-Byte zu enthalten (da es irgendwo alle 256 Bytes enthalten muss). Dies bedeutet, dass a) ich Ihnen keinen TIO-Link geben kann (weil TIO NUL in Programmen nicht mag, oder zumindest nicht herausgefunden habe, wie mein Browser damit umgehen kann) und b) ich kann das Programm nicht wörtlich in Stack Exchange einfügen. Stattdessen habe ich einen
xxd
umkehrbaren Hexdump hinter dem "Code Snippet" -Link platziert.Code-Snippet anzeigen
Erläuterung
Dieses Programm besteht aus drei identischen Teilen. (Die Verkettung mehrerer identischer Teile eines Programms ist für mich in strahlungshärtenden Programmen ein Thema .) Jeder Birnbaum benötigt eine Prüfsumme, um dem Interpreter mitzuteilen, welche Teile des Programms ausgeführt werden sollen. Es dreht jeden Teil des Programms, für den die Prüfsumme erfolgreich ausgeführt wurde, bis zum Start (oder druckt,
a partridge
wenn keine Prüfsumme übereinstimmt). In diesem Fall haben wir eine Prüfsumme für jedes der drei Teile, und somit bewegt sich ein nicht bestrahlter Teil zum Start. Wir können also davon ausgehen, dass das Programm aus einem unveränderten Teil besteht, gefolgt von zwei weiteren Teilen (von denen einer möglicherweise geändert wurde).Jeder Teil beginnt mit einer neuen Zeile und fährt dann mit dem folgenden Code fort (ich habe Leerzeichen und Kommentare unten hinzugefügt):
Danach folgt eine Kopie von jedem Oktett, das bisher nicht im Programm verwendet wurde (nur um die Partitur hochzufahren), und schließlich die Prüfsumme. (Es gibt keinen abschließenden Zeilenumbruch. Teile beginnen mit einem Zeilenumbruch, enden jedoch nicht mit einem.)
Hier gibt es drei verschiedene Fälle:
%z
mehrmals hinzugefügt und / oder entfernt und landet schließlich in der Hash-Tabelle. Tatsächlich wird es der einzige Schlüssel in der Hash-Tabelle sein (da die Zeichenfolge von der Newline des zweiten Teils bis zum Ende des dritten Teils läuft und die Hash-Tabelle mit nur einer Newline beginnt). Ich werde nur alleine ausgedruckt.<DATA>
enthält jedes Zeichen eine gerade Anzahl von Malen, sodass die Hash-Tabelle ihren ursprünglichen Inhalt, eine einzelne neue Zeile, enthält und gedruckt wird.<DATA>
Beginnt erst ab der Zeile darunter zu lesen__DATA__
, sodass nur der dritte Teil angezeigt wird. Dies hat mehr als fünf Zeichen, die ungerade oft vorkommen, sodass der Sonderfall ausgelöst wird, dass eine neue Zeile gedruckt wird.Nachprüfung
Eine letzte Sache, die für so ziemlich jedes strahlungsgehärtete A Pear Tree-Programm überprüft werden muss, ist, ob eine Löschung zufällig dazu führt, dass ein unerwünschter Codeabschnitt die Prüfsumme korrekt summiert und den Code an die falsche Stelle dreht. Angesichts der Verwendung von 32-Bit-Prüfsummen ist dies unwahrscheinlich, aber nicht unmöglich. Ich habe das folgende Brute-Force-Skript verwendet, um sicherzustellen, dass dies bei keiner Löschung passiert:
Das Überprüfungsskript bestätigt, dass dieses Programm ordnungsgemäß funktioniert.
quelle
Stax , 11 Bytes (Ergebnis von 4)
Online ausführen und debuggen!
Es ist mir eine Ehre, die erste (chronologisch) Antwort auf diese Herausforderung mit einer Punktzahl größer oder gleich 4 zu haben. Vielleicht kann die Punktzahl sogar noch höher sein.
In Stax, einen Stringliteral , die aus einem einzigen Zeichen bestehen geschrieben , mit
'
, so'', 'c, 'd, '~
sind alle Stringliterale. Die entsprechenden Befehle fürc
d
und~
Mittel duplizieren den oberen Rand des Hauptstapels, legen den oberen Rand des Hauptstapels ab und legen den oberen Rand des Hauptstapels ab und drücken auf den Eingabestapel. Für diese Herausforderung hat Eingabestapel nicht ausgegeben beeinflussen und ist nicht wichtig, daher können wir sagen ,d
und~
sind identisch.Erläuterung
Es ist am besten, den Code in mehrere Teile zu unterteilen und diese getrennt zu betrachten.
Wenn es nicht manipuliert wird, werden
'''cc
ein Literal'
und ein Literalc
auf den Hauptstapel verschoben und der obere Stapel wird dupliziert, so dass der Stapel (von unten nach unten) istc,c,'
.Wenn nicht manipuliert, wird
'~~
das Literal~
verschoben und dann geöffnet (und zum Eingabestapel verschoben), was im Grunde genommen ein No-Op für den Hauptstapel ist.Wenn nicht manipuliert,
'dd
drückt er das Literald
und öffnet es, ein weiteres No-Op für den Hauptstapel.Da am Ende des Programms keine explizite Ausgabe erfolgt, wird implizit die Oberseite des Hauptstapels ausgedruckt.
Wenn das Programm so ausgeführt wird, wie es ist, ist der letzte Stapel noch vorhanden
c,c,'
und wird ausgegebenc
.Wenn der erste Teil wird
''cc
, dann haben wir ein Literal'
und zwei Kopieranweisungen, der letzte Stapel wird',','
. Vorausgesetzt, die beiden anderen Teile sind No-Op, wird das Ergebnis sein'
.Wenn der erste Teil wird
'''c
, ist das Ergebnis im Grunde das gleiche wie dasjenige ohne Manipulation, aber dasc
wird nicht dupliziert. So wird der Stapel seinc,'
. Nach zwei No-Ops ist die Spitze des Stapelsc
.So können wir im ersten Teil Strahlung nachweisen.
Der zweite Teil und der dritte Teil funktionieren genauso. Ich werde den dritten Teil als Beispiel nehmen.
Wenn der dritte Teil manipuliert wird, bleiben die ersten beiden Teile wie sie sind und der Stapel, bevor der dritte Teil ausgeführt wird
c,c,'
Wenn der dritte Teil wird
'd
, wird ein Literald
an die Spitze des Hauptstapels verschoben, und es wird nichts weiter unternommen. Das oberste Ende des Hauptstapels ist nund
das, was ausgegeben wird.Wenn der dritte Teil wird
dd
, werden zwei Elemente aus dem Hauptstapel entfernt und jetzt wird der obere Teil des Stapels'
ausgegeben.Somit können wir im dritten Teil Strahlung nachweisen. Aus dem gleichen Grund können wir im zweiten Teil Strahlung nachweisen.
quelle
05AB1E , Score 2, 6 Bytes
Druckt manchmal doppelt so viele Zeichen wie entfernt. Enthält nicht
'
.Wie es funktioniert:
Erstes entfernen
„
Probieren Sie es online!
Zuerst legen wir ein leeres String-Literal auf den Stack. Dann drücken wir
„„
, was implizit gedruckt wird.A. Entfernen
"
Probieren Sie es online!
Zuerst schieben wir uns
""
mit der2-char string
Anweisung zum Stapel . Dann versuchen wir, eine weitere 2-stellige Zeichenfolge zu erhalten, aber diese wird abgebrochen (ich weiß nicht genau warum) und die""
wird gedruckt.Entfernen der zweiten oder dritten
„
Probieren Sie es online!
Zuerst schieben wir uns
""
mit der2-char string
Anweisung zum Stapel . Dann drücken wir„
, was implizit gedruckt wird.quelle
Gelee , 5 Bytes, Punktzahl 2
Probieren Sie es online!
Bei
”
entferntem:Probieren Sie es online!
Das Zeichen
”
beginnt mit einem Ein-Byte-Zeichen-Literal. Dieses Programm beginnt mit dem,””
was den String ergibt”
. Dieḷ
Dyade nimmt ihren linken Streit. Die Zeichenfolge wird”
nur durch die beiden Instanzen von übergebenḷ
.Bei
ḷ
entferntem:Probieren Sie es online!
In diesem Programm
””
ergibt das Zeichen”
dann”ḷ
das Zeichenḷ
und nur dieses wird ausgegeben.Andere Lösungen
a
odero
hättenḷ
für diese Einreichung gearbeitet.⁾⁾⁾⁾FFF
. Dies funktioniert auf ähnliche Weise.⁾
ist wie,”
aber es beginnt ein Zwei- Byte-String-Literal. Die "bestrahlten" Programme geben das gelöschte Byte zweimal aus, was in den Kommentaren als gültig befunden wurde.Hier ist eine (viel weniger ausgefallene) Jelly-Version des Gültigkeitsprüfers von Magic Octopus Urn. Die linke Spalte der Ausgabe ist das gelöschte Zeichen und die rechte Spalte ist die Ausgabe des resultierenden Programms.
quelle