Ihre Aufgabe ist es, ein nicht leeres Computerprogramm zu schreiben, das aus einer Folge von Bytes besteht. Wenn wir ein bestimmtes Byte im Programm auswählen und alle Instanzen davon aus dem Programm entfernen, sollte das geänderte Programm das entfernte Byte ausgeben.
Zum Beispiel wenn unser Programm wäre
aabacba
Dann bcb
würde ausgeben a
, aaaca
müsste ausgeben b
und aababa
würde ausgeben c
.
Es ist egal, was das unveränderte Programm macht.
Die Antworten werden in Bytes gewertet, wobei das Ziel darin besteht, die Anzahl der Bytes zu minimieren.
code-golf
source-layout
radiation-hardening
Weizen-Assistent
quelle
quelle
Antworten:
zsh,
603594566561548440415399378370 BytesHängt von coreutils + ab
dc
.Probieren Sie es online!
Das war ... eine Reise.
Diese Antwort besteht aus drei Teilen. Die ersten 4 Zeilen behandeln bestimmte Sonderfälle, um den folgenden Code zu vereinfachen. Die nächsten beiden Zeilen und die letzte Zeile bewirken im Wesentlichen dasselbe, aber genau eine Zeile wird mit einer bestimmten Zeichenentfernung ausgeführt. Sie sind mit meist komplementären Zeichensätzen geschrieben, sodass das Entfernen von Zeichen höchstens einen Zeichensatz unterbricht und der andere weiterhin funktioniert.
Mit Blick auf den ersten Teil beschäftigen wir uns zuerst
ec\nho \\n
ca t<<<$'\x20'
(gefolgt vonexi t
, um zu vermeiden, dass späterer Code ausgeführt wird, was zu einer überflüssigen Ausgabe führen würde)$
Entfernung mitd$c -e8BC6P
(8BC6
=9226
ist36*256 + 10
, und 36 und 10 sind die Bytewerte der$
Zeichen und der Zeilenumbruchzeichen; wir verwenden hexadezimale Ziffern, um zu vermeiden, dass sie in den großen Kommentar in Zeile 6 aufgenommen werden müssen.)0
Entfernen mitd0c -eKp
(K
erhält die0
Standard- Dezimalgenauigkeit )Im nächsten Teil werden als einzige Zeichen (außer dem Müll am Ende der zweiten Zeile)
$'\01234567v;
Leerzeichen und Zeilenumbrüche verwendet. Davon wurden vier berücksichtigt, sodass der Rest ('\1234567v
) nicht in der letzten Zeile vorkommen kann. Wenn Sie die oktalen Escapes erweitern ($'\123'
entspricht dem ASCII-Zeichen mit dem Wert 123 8 ), erhalten Sie:Die erste Zeile durchläuft alle im Programm verwendeten Zeichen und sucht nach jedem Zeichen im eigenen Quellcode (
$0
ist der Dateiname des ausgeführten Skripts). Dabei werden alle Zeichen ausgegeben, die nicht gefunden wurden.Die zweite Zeile sieht ein wenig seltsam aus und scheint dasselbe zu tun wie
exit
mit ein paar Nops. Die Codierungexit
als Oktal führt jedoch direkt dazu$'\145\170\151\164'
, dass2
oder nicht enthalten ist3
. Wir müssen dies tatsächlich weniger widerstandsfähig gegenüber Umzügen machen. Dies liegt daran, dass, wenn eines von'\014567v
entfernt wird, die erste und die zweite Zeile unterbrochen werden, so dass der Rest des Codes ausgeführt werden kann. Es muss jedoch auch unterbrochen werden, wenn2
oder3
entfernt werden, damit die Zeilen 3 und 4 ausgeführt werden können. Dies wird durch Einblenden von:
und erreicht;
, die eine 2 bzw. 3 in ihrer Oktaldarstellung haben.Der Müll am Ende von Zeile 2 ist einfach da, um sicherzustellen, dass jedes druckbare ASCII-Zeichen mindestens einmal vorkommt, da dies für die Art und Weise, wie die Prüfung durch Durchlaufen der einzelnen Zeichen erfolgt, erforderlich ist.
Wenn
exit
es im ersten Abschnitt nicht aufgerufen wurde (dh durch das Entfernen eines der'\01234567v
Zeichen beschädigt wurde ), fahren wir mit dem zweiten fort, in dem wir dasselbe tun müssen, ohne eines dieser Zeichen zu verwenden. Die letzte Zeile ähnelt der decodierten ersten Zeile, mit der Ausnahme, dass wir den Bereich der Schleife verkleinern können, um einige Bytes zu sparen, da wir bereits wissen, dass alle Zeichen mit Ausnahme von'\01234567v
abgedeckt wurden. Es hat auch0# $#
vor sich, was es auskommentiert und verhindert, dass es eine fremde Ausgabe erzeugt, wenn0
oder$
entfernt wurden.quelle
Netzhaut , 1 Byte
Probieren Sie es online!
Wenn alle Instanzen des einzelnen Bytes (
1
) entfernt wurden, lautet die Ausgabe1
. Einfach genug.quelle
1
für das leere Programm ausgibt ? Ungeachtet dessen denke ich, dass die fraglichen Antworten unterschiedliche Ansätze und Verhaltensweisen verwenden. IMO ist eine mehrsprachige Antwort nur dann gerechtfertigt, wenn der Ansatz derselbe bleibt. (Objektiv ist dies kein Polyglot, da der tatsächliche Code für die unten stehenden Antworten unterschiedlich ist.) Sie können frei wählen, wie Sie möchten, aber eine gültige Antwort ist eine gültige Antwort. Ich werde meine Antwort so lassen, wie sie ist, ich möchte keine Sammlung von Antworten darauf unterbringen.Sprache, 216173027061157310 Bytes
216173027061157310 = (144115617572598740 + 144115241762960340 + 144115194786755540) / 2
. Es gibt216173027061157310 - 144115617572598740
$
s,216173027061157310 - 144115241762960340
#
s und216173027061157310 - 144115194786755540
Leerzeichen.Die 144115617572598740
#
s und Leerzeichen codieren das folgende BF-Programm:Probieren Sie es online!
Die 144115241762960340
$
s und Leerzeichen codieren das folgende BF-Programm:Probieren Sie es online!
Die 144115194786755540
$
s und#
s codieren das folgende BF-Programm:Probieren Sie es online!
Bearbeiten: 72057832274401770 Bytes dank @Nitrodon gespeichert.
quelle
U
und Byte 127 verwenden? Probieren Sie es online! Oder auch nur das nul-Byte und soh?U
das kürzeste druckbare ASCII-Byte ist, das ausgegeben werden kann. Ich wollte keine nicht druckbaren Bytes verwenden.Gelee , 1 Byte
Ganz anders als die Retina-Antwort. pfeift
Probieren Sie es online!
quelle
Polyglot * , 1 Byte ( auf Bestätigung wartend )
Probieren Sie es online! (mit Dreieckigkeit)
*: Dies funktioniert in einer (ziemlich großen) Vielfalt von Sprachen (mit Ausnahme von Esolangs wie 4,> <> und dergleichen und einigen anderen Ausnahmen). Identisch mit der Jelly-Antwort im Quellcode, aber die Methode der E / A ist anders - Die Ausgabe erfolgt über den Exit-Code. Wenn man
0
aus dem Quellcode entfernt, bleibt ein leeres Programm übrig, das oft keinen Fehler macht und in den meisten Sprachen den Exit-Code 0 liefert .quelle
sed , 1 byte
Probieren Sie es online!
Ganz anders als die Retina-Antwort oder die Gelee-Antwort.
quelle
Unär (nicht konkurrierend), 96 Bytes
Hier ist
xxd
Müllhalde.Eine umfassendere Definition der Unary-Sprache ermöglicht beliebige Zeichen im Quellcode. Aber ich habe keinen Compiler oder Interpreter gefunden, der dafür geeignet wäre. Deshalb habe ich diese Antwort als nicht wettbewerbsfähig markiert. Wenn Sie eine finden, die vor dieser Frage gestellt wurde, werde ich darauf verlinken.
quelle