Die Herausforderung besteht darin , eine Reihe von Zeichen zu finden , die nicht kann in erscheint jedes rechtliches Programm in Ihrer Programmiersprache der Wahl. Dazu gehören Kommentare, Zeichenfolgen oder andere "nicht ausführbare" Teile.
Herausforderung
- Ihr Programm ist möglicherweise spezifisch für eine bestimmte Version oder Implementierung der Compiler- / Interpreter- / Laufzeitumgebung Ihrer Sprache. Wenn ja, geben Sie bitte die Einzelheiten an.
- Es sind nur Standardoptionen für Compiler / Interpreter / Laufzeit zulässig. Sie können Ihrem Compiler kein seltsames Flag übergeben, um ein bestimmtes Ergebnis zu erhalten (z. B. das Übergeben eines Flags, um Warnungen in Fehler umzuwandeln).
- Wenn Ihre Programmiersprache eine bestimmte Codierung erfordert (z. B. UTF-8), muss Ihre Zeichenfolge auch korrekt codiert sein (dh Zeichenfolgen, die nur aufgrund von Zeichendekodierungsfehlern fehlschlagen, sind nicht zulässig).
- Jeder einzelne Charakter in Ihrem Beitrag muss in einem juristischen Programm zulässig sein. Das heißt, Sie können nicht einfach ein Zeichen verwenden, das immer abgelehnt wird.
- Der Compiler / Interpreter / Laufzeit muss einen Fehler, wenn sie angegeben sind alle Quellcode, der die Zeichenfolge als Teil enthält. Der Fehler muss nicht programmübergreifend gleich sein - eine Einbettung Ihres Strings kann einen Syntaxfehler verursachen, während eine andere einen Laufzeitfehler verursachen kann.
Wertung
- Kürzeste unzulässige Zeichenfolge für jede Sprache gewinnt.
- Sie sollten erklären, warum Ihre Zeichenfolge illegal ist (warum sie in einem legalen Programm nirgendwo auftauchen kann).
- Diskutiere falsche Lösungen in den Kommentaren. Insbesondere sollten Sie einen Link zu TIO oder einem vergleichbaren Programm bereitstellen, der ein legales Programm (dh eines, das keine Fehler produziert) demonstriert, das die vorgeschlagene Teilzeichenfolge enthält.
- In einigen Sprachen (z. B. Bash, Batch, Perl) können beliebige Binärdaten an ein Programm angehängt werden, ohne die Gültigkeit zu beeinträchtigen (z. B. Verwendung
__DATA__
in Perl). Für solche Sprachen können Sie eine Lösung einreichen, die nur in einem solchen abschließenden Abschnitt angezeigt werden kann . Stellen Sie sicher, dass Sie dies in Ihrer Antwort vermerken. (Die Definition dieses "abschließenden Abschnitts" ist sprachabhängig, bedeutet jedoch im Allgemeinen jeden Text, nachdem der Parser das Skript vollständig nicht mehr gelesen hat.)
Beispiel
In Python könnte ich einreichen
x
"""
'''
Dies kann jedoch in das größere Programm eingebettet werden
"""
x
"""
'''
y
'''
also ist es nicht zulässig.
code-challenge
restricted-source
nneonneo
quelle
quelle
Antworten:
Änderung , 2 Bytes
Das sind zwei Zeilenvorschübe. Valid Changeling muss immer ein perfektes Quadrat aus druckbaren ASCII-Zeichen bilden, damit es nicht zwei Zeilenvorschübe hintereinander enthält.
Der Fehler ist immer ein Parser-Fehler und immer derselbe:
begleitet von Exit-Code 1 .
Probieren Sie es online!
quelle
Java, 4 Bytes
Probieren Sie es online!
Dies ist eine ungültige Unicode-Escape-Sequenz und führt zu einem Fehler im Compiler.
quelle
"\\u;"
.\uXXXX
bevor etwas anderes ausgeführt wird. Ja, dies funktioniert sogar innerhalb von comments.zaCOBOL (GNU) , 8 Bytes
Zuerst ein Zeilenvorschub, um zu verhindern, dass Sie mein Wort in eine kommentierte Zeile einfügen.
In der Vergangenheit wurden COBOL-Programme auf Codierungsblättern gedruckt, der Compiler stützt sich stark auf Zeilen mit einer Länge von 80 Zeichen, es gibt keine mehrzeiligen Kommentare und die ersten 6 Zeichen sind Kommentare (oft als bearbeitbare Zeilennummern verwendet). Sie können fast alles dort einfügen , SO VIEL ICH WEISS. Ich habe
THEGAM
am Anfang der nächsten Zeile gewählt.Dann akzeptiert das 7. Symbol in jeder Zeile nur eine sehr eingeschränkte Liste von Zeichen: Leerzeichen (kein Effekt), Sternchen (kommentiert den Rest der Zeile), Bindestrich, Schrägstrich, es kann andere geben, aber sicherlich nicht
E
.Der Fehler von GnuCobol ist zum Beispiel:
Probieren Sie es online!
Außerdem hast du gerade das Spiel verloren.
quelle
Also, you just lost the game.
Ich hätte fast downvotedJavaScript, 7 Bytes
Beachten Sie den führenden Zeilenumbruch.
\u)
ist eine ungültige Unicode-Escape-Sequenz. Aus diesem Grund ist diese Zeichenfolge ungültig//
am Anfang wird immer noch nicht funktionieren, da die zweite Zeile unkommentiert bleibt/*
wird die Zeichenfolge nicht vollständig dekommentiert, da das Schließen*/
damit abgeschlossen ist und das\u)
Exponierte erhalten bleibt/
nach dem String steht. Wenn also das)
vor dem steht\u
, können wir sicherstellen, dass das reguläre Ausdrücke-Literal immer ungültig ist1||1(string)/
es vermeiden, den regulären Ausdruck bewerten zu müssen. Das Semikolon am Anfang der zweiten Zeile verhindert dies, indem der Ausdruck beendet wird,1||1
bevor er die zweite Zeile erreicht. Dadurch wird ein SyntaxError mit dem Symbol erzwungen;*
.Versuch es!
Code-Snippet anzeigen
quelle
/* */\u0045 = 3
scheint gültiger JavaScript-Code zu sein.3 */\u;/
Ist noch gültig./
(nicht, dass Sie es beheben müssen). (Außerdem;
erzwingt das nicht das Parsen des schlechten Regex, sondern einen SyntaxError mit dem*
.)#if 0
so: OnlinePython, 10 Bytes (nicht Cpython)
Beachten Sie den führenden Zeilenumbruch. Kann aufgrund des Zeilenumbruchs nicht auskommentiert werden, und keine Kombination von dreifach zitierten Zeichenfolgen sollte funktionieren, wenn ich das richtig überlegt habe.
@feersum in den Kommentaren scheint jedes cpython-Programm unter Windows völlig kaputt gemacht zu haben, soweit ich das durch Hinzufügen des 0x1A-Zeichens am Anfang einer Datei erkennen kann. Es scheint, dass dies vielleicht (?) An der Art und Weise liegt, wie dieses Zeichen vom Betriebssystem behandelt wird. Offenbar handelt es sich dabei um eine Übersetzung in ein EOF, wenn es aufgrund eines älteren DOS-Standards durch stdin geleitet wird.
In einem sehr realen Sinne ist dies kein Problem mit Python, sondern mit dem Betriebssystem. Wenn Sie ein Python-Skript erstellen, das die Datei liest und das eingebaute Skript verwendet
compile
, wird das erwartungsgemäßere Verhalten beim Auslösen eines Syntaxfehlers angegeben. Pypy (das macht wahrscheinlich nur intern) wirft auch einen Fehler.Bearbeiten:
Aufgrund der Sorgfalt von @ feersum, obskure Wege zu finden, den Python-Interpreter zu beschädigen, ist diese Antwort für jede typische Cpython-Umgebung, soweit ich das beurteilen kann, vollständig ungültig! (Python 2 und 3 für Windows und Linux) Ich glaube immer noch, dass diese Risse für Pypy auf keiner Plattform funktionieren werden (die einzige andere Python-Implementierung, die ich getestet habe).
quelle
"""?'''"""
C (clang) , 16 Bytes
Probieren Sie es online!
*/
schließt jeden/*
Kommentar und das führende Leerzeichen stellt sicher, dass wir nicht nur eines gestartet haben. Die neue Zeile schließt jeden//
Kommentar und unterbricht jedes Zeichenfolgenliteral. Dann verursachen wir ein#else without #if
oder einen#else after #else
Fehler (unabhängig davon, wie viele#if 0
s wir in uns haben).quelle
-std=c99
, aber lasst uns versuchen, auf clang umzuschalten.R"foobar(...)foobar"
und nur ein rechtes Paren, gefolgt von dem passenden Delimeter und einem Zitat wird es schließen.Pyth, 6 Bytes
¡
ist ein nicht implementiertes Zeichen, dh wenn der Pyth-Parser es jemals auswertet, tritt ein Fehler mit einem PythParseError auf. Der Code stellt sicher, dass dies auf einem der¡
s geschieht .Es gibt drei Möglichkeiten, wie ein Byte in einem Pyth-Programm vorhanden sein und nicht analysiert werden kann: In einem Zeichenfolgenliteral (
"
oder."
gleichwertig analysiert), in einem Python-Literal ($
) und unmittelbar nach einem\
.Dieser Code verhindert,
\
dass er fehlerfrei ausgewertet wird, da dies nur das unmittelbar folgende Byte und die zweiten¡
Fehler betrifft .$
bettet den Code innerhalb des$
s direkt in den kompilierten Python-Code ein. Ich gehe nicht davon aus, was dort passieren könnte.Wenn das Programm diesen Code in einem
$
Kontext erreicht, endet es am$
, und¡
unmittelbar danach tritt der Parser-Fehler auf. Pyths Python-Literale enden immer beim nächsten$
, unabhängig davon, was der Python-Code tut.Wenn das Programm in einem
"
Kontext gestartet"
wird, beendet das den String und das Finale¡
den Parser-Fehler.quelle
Ada - 2 Bytes
Ich denke das sollte funktionieren:
Das ist Newline-Unterstrich. Newline beendet Kommentare und ist in einer Zeichenfolge nicht zulässig. Auf Leerzeichen kann kein Unterstrich folgen. Früher war es nur nach Buchstaben und Zahlen erlaubt, aber die Einführung von Unicode machte die Dinge kompliziert.
quelle
x86 32-Bit-Maschinencode, 11 Bytes (und zukunftssicher 64-Bit)
Das ist
times 9 nop
/ud2
. Es handelt sich im Grunde genommen um einen NOP-Schlitten , der immer noch als 0 oder mehrnop
s ausgeführt wird und dannud2
eine Ausnahme auslöst, unabhängig davon, wie viele0x90
Bytes als Operanden für einen vorhergehenden Opcode verwendet wurden. Andere Einzelbyte-Befehle (wietimes 9 xchg eax, ecx
) würden auch funktionieren.x86 64-Bit-Computercode, 10 Byte (aktuelle CPUs)
Es gibt einige unzulässige 1-Byte-Anweisungen im 64-Bit-Modus, bis einige zukünftige ISA-Erweiterungen sie als Präfixe oder Teile von Multi-Byte-Opcodes nur im 64-Bit-Modus neu verwenden, unabhängig von ihrer Bedeutung im 32-Bit-Modus.
0x0e
befindet sichpush cs
im 32-Bit-Modus, ist jedoch auf aktuellen CPUs (getestet auf Intel Skylake) in 64-Bit unzulässig .Regelinterpretation für ausführbaren Maschinencode :
Die Bytes können nicht übersprungen werden (wie die Einschränkung "nicht analysiert"), da CPUs keine Ausnahmen auslösen, bis sie tatsächlich versuchen, sie zu dekodieren / auszuführen (nicht spekulativ).
Illegale Mittel lösen immer eine Ausnahme aus, zum Beispiel eine Ausnahme für illegale Anweisungen. (Echte Programme können dies mit einem Exception-Handler auf Bare-Metal-Basis abfangen oder einen OS-Signal-Handler installieren, aber ich denke, dies fängt den Geist der Herausforderung ein.)
ud2
Dies funktioniert, weil eine kürzere Byte-Zeichenfolge, die auf endet , als imm32 und / oder Teil des Adressierungsmodus für einen anderen Befehl angezeigt oder über ein Befehlspaar aufgeteilt werden kann . Es ist am einfachsten, darüber nachzudenken, was Sie vor die Zeichenfolge stellen könnten, um die Bytes als Teil einer Anweisung zu "verbrauchen" und etwas zu hinterlassen, das keine Fehler verursacht.Ich denke, ein Befehl kann höchstens 9 Bytes von beliebigem Material aufnehmen: ein SIB-Byte, ein disp32 und ein imm32. dh die ersten 2 Bytes dieses Befehls können 8 NOPs und ein ud2, aber nicht 9, verbrauchen.
9 Nops nicht zu schlagen:
64-Bit-Modus:
Aber die Bytes für 8 NOPs + ud2 (oder
times 9 db 0x0e
) können als Teil anderer Insns erscheinen:quelle
ud2
? Es scheint, dass Sie sagen, dass Sie die Regeln so interpretieren, als würden Sie das Springen über die Bytes verbieten.ud2
Würde das alleine also gut funktionieren, oder? Oh ... ich denke, Sie sagen, das Problem ist, dassud2
es als Präfix zu einer gültigen Anweisung erscheinen kann? Der zweite Teil dieser Antwort war für mich etwas schwer zu verstehen.ud2
können inimm32
jeder Anweisung vorkommen. Ich habe darüber nachgedacht, welche Bytes Sie vor eine solche Zeichenfolge stellen können, die0f 0b
als Teil eines früheren Befehls "verbraucht", anstatt als "dekodiert"ud2
. Ich war nicht ganz zufrieden damit, wie ich es präsentiert habe, aber ich wollte veranschaulichen, warum nur 8nop
s nicht genug waren und was mit 9nop
s + passierteud2
.%else
/%else
besiegt wird%if 0
, was normalerweise jeden ungültigen Text davor schützt, analysiert zu werden. (Idee aus einer CPP-Antwort)C #, 16 Bytes
Funktioniert weil:
//
Kommentar funktioniert wegen der neuen Zeile nicht/*
Kommentar wird wegen der nicht funktionieren*/
#if false
zum Start wird wegen der nicht funktionieren#endif
"
schließt jedes String-Literal<#@#>
ist eine namenlose Direktive, die für T4-Vorlagen fehlschlägt./
das nicht täuscht , wenn man sie am Start hat*/
Jede Variation schlägt mit einem Kompilierungsfehler fehl.
quelle
APL und MATL und Fortran , 3 Bytes
Newline, Quote, Newline gibt immer einen Fehler aus, da keine Blockkommentare vorhanden sind:
unbalanced quotes
string literal not closed
Invalid character in name
quelle
Literate Haskell , 15 Bytes
Einen gelöschten Versuch von nimi reparieren.
Probieren Sie es online!
Nimis ursprünglicher Versuch sind die letzten beiden Zeilen, die auf Literate Haskell basieren und es nicht zulassen, dass sich
>
Style Literate Code in einer benachbarten Zeile zu einer Kommentarzeile befindet (5
hier). Es ist fehlgeschlagen, weil es in einen Kommentar mit der alternativen ("LaTeX") Schreibweise eingebettet werden kann:Doch die
\begin{code}
tut Stil von Literate Haskell nicht nisten, weder an mir noch in{- -}
mehrzeiligen Kommentaren, so durch eine Linie mit dem Setzen\end{code}
kurz vor der Linie mit der5
, dass Abhilfe schlägt fehl, und ich habe kein anderes sehen.quelle
Free Pascal, 18 Bytes
Schließen Sie zuerst alle möglichen Kommentare und führen Sie dann die bedingte Kompilierung durch.
Bitte kommentieren Sie hier, wenn ich etwas vergessen habe.
quelle
begin end.
.end.
Gültigkeit von der Frage zugelassen werden.Commodore 64 Basic, 2 Bytes
(das ist eine neue Zeile, gefolgt von dem Buchstaben "B").
Jede Zeile in einem Commodore 64-Programm muss entweder mit einer Zeilennummer oder einem BASIC-Schlüsselwort beginnen, und gespeicherte Programme lassen nur Zeilennummern zu. Es gibt keine Schlüsselwörter, die mit "B" beginnen (oder "H", "J", "K", "Q", "X", "Y" oder "Z").
quelle
=0
dann anhänge, wird dies nur eine Anweisung Anweisung ...Brain-Hack (eine Variation von Brain-Flak ),
32 BytesVielen Dank an Wheat Wizard, der darauf hingewiesen hat, dass Brain-Hack keine Kommentare unterstützt, und mir ein Byte erspart hat.
Probieren Sie es online!
quelle
#
TIO(()){()}
.CJam , 7 Bytes
Probieren Sie es online!
quelle
VBA, 2 Bytes
Ein Zeilenvorschub, gefolgt von einem Unterstrich,
_
fungiert in VBA als Zeilenfortsetzungszeichen, und da sich nichts in der Zeile direkt links oder oberhalb der Zeilenfortsetzung befindet, führt das Fehlen mehrzeiliger Kommentare in VBA dazu, dass die Kompilierung immer ausgelöst wird ZeitfehlerCompile Error:
Invalid character
quelle
_
, nur, dass es keine gültige Zeile auf der linken Seite oder darüber gibtmyfunction(
\n_
)
?Public Function Foo( ByVal bar as Integer, _
(neue Zeile).bas as long) as double
Wenn Sie also die von Ihnen beschriebene Funktion aufrufen , würde dies zu einem Fehler führenmyfunction( _
\n_
)
. Entschuldigung für die Verwirrung. Anders ausgedrückt, Sie hätten zwei Zeilenumbrüche verwenden sollen.SmileBASIC, 2 Bytes
Nach dem Ende einer Zeile wird nichts mehr fortgesetzt. Sie brauchen also nur einen Zeilenumbruch, gefolgt von etwas, das nicht der Anfang einer Anweisung sein kann.
!
ist der logische Nicht-Operator, aber Sie dürfen das Ergebnis eines Ausdrucks nicht ignorieren, daher wäre auch so etwas!10
ungültig (X=!10
natürlich solange es funktioniert).Ähnliche Dinge funktionieren in jeder Sprache, in der alles am Ende einer Zeile endet, solange der Code analysiert wird, bevor er ausgeführt wird.
Es gibt eine Menge alternativer Zeichen, die hier verwendet werden könnten. Daher halte ich es für interessanter, diejenigen aufzulisten, die möglicherweise gültig sind.
@
ist beispielsweise der Beginn eines Etiketts@DATA
;(
könnte Teil eines Ausdrucks sein, wie er(X)=1
aus irgendeinem Grund erlaubt ist; ein beliebiger Buchstabe oder_
könnte ein VariablennameX=1
, ein FunktionsaufrufLOCATE 10,2
oder ein Schlüsselwort seinWHILE 1
;'
ist ein Kommentar; und?
ist die Abkürzung fürPRINT
.quelle
INTERCAL , 12 Bytes
Versuchen Sie es online zu knacken!
Der Ansatz von INTERCAL bei Syntaxfehlern ist etwas Besonderes. Im Grunde genommen wird eine ungültige Anweisung nur dann fehlerhaft, wenn das Programm versucht, sie auszuführen. Tatsächlich
PLEASE NOTE
beginnt die idiomatische Syntax für Kommentare damit , dass eine Anweisung wirklich nur gestartet wird , dass sie nicht ausgeführt werden soll, und beginnt sie dann mit dem BuchstabenE
. Wenn sich Ihr CodeDODO
in der Mitte befindet, können SieDOABSTAINFROM(1)(1)
eine gültige Anweisung voranstellen und am Ende anheften, und es ist in Ordnung, wenn Sie dieDODODO
Ausführung einfach um diese herum biegen können(1)DON'TDODODOCOMEFROM(1)
. Auch wenn INTERCAL keine String-Literal-Syntax zum Ausblenden hat, können mit Syntaxfehlern keine unzulässigen Strings erstellt werden, selbst wenn alle möglichen Zeilennummern mit erschöpft sind(1)DO(2)DO...(65535)DODODO
, da es so aussieht, als ob es durchaus möglich ist, doppelte Zeilennummern zu haben, wenn manCOME FROM
mit einer von ihnen arbeitet.Um eine illegale Zeichenfolge zu machen, müssen wir tatsächlich eine perfekt gültige Aussage verwenden:
TRY AGAIN
. Auch wenn es nicht ausgeführt wird, muss es unbedingt die letzte Anweisung in einem Programm sein, wenn es überhaupt im Programm enthalten ist. 12 Bytes sind meines Wissens die kürzeste Zeit, die eine ungültige Zeichenfolge verwenden kannTRY AGAIN
, da sie sicherstellen muss, dass eine Anweisung dahinter steht (ausgeführt oder nicht), alsoDOTRYAGAIN
nur normaler Code, und sicherstellen muss, dass die gesamte Anweisung verwendet wird in der Tat istTRY AGAIN
, soTRYAGAINDO
nicht funktioniert , weil es leicht in ein ignoriert, normalen Syntaxfehler gedreht werden kann:DON'TRYAGAINDOGIVEUP
oderPLEASE DO NOT TRY TO USE TRYAGAINDO NOT THAT IT WOULD WORK
. Egal, auf was Sie sich begebenDOTRYAGAINDO
, Sie werden entwederICL993I I GAVE UP LONG AGO
mitICL079I PROGRAMMER IS INSUFFICIENTLY POLITE
, oder irrenICL099I PROGRAMMER IS OVERLY POLITE
.quelle
ICL993I I GAVE UP LONG AGO
.COME FROM
alle Zeilenbeschriftungen verwenden, kann es etwas schwierig sein, den Steuerungsfluss um den Block herum umzuleiten, aber Sie können einfach nichts dagegen tunGIVING UP
!AWK , 4 Bytes
Probieren Sie es online!
Da
AWK
es keine Methode für mehrzeilige Kommentare gibt, müssen Sie 2 Zeilenvorschübe und 1 Zeile danach einfügen/
, um das Auskommentieren oder Verwandeln in einen regulären Ausdruck zu verhindern, z1/
. B. Hinzufügen . Die häufigste Meldung ist `unerwarteter Zeilenumbruch oder Ende der Zeichenfolge.Mit vorherigen Riss
quelle
Fortran, 14 Bytes
Keine mehrzeiligen Kommentare oder Präprozessor-Direktiven in Fortran.
quelle
JavaScript (Node.js) ,
98 BytesProbieren Sie es online!
Ich denke, das sollte illegal genug sein.
Frühere JS-Versuche in anderen Antworten
Erläuterung
Dies ist an sich illegal und blockiert auch alle einfachen und doppelten Anführungszeichen, da sich diese Anführungszeichen nicht über Zeilen ohne ein
\
am Ende einer Zeile erstrecken könnenund
Blockiert Kommentare durch die Einführung illegaler Escape-Sequenzen
Blockiert das anfängliche Backtick, indem nicht abgeschlossenes RegExp-Literal eingeführt wird
Blockiert mit Tags versehene Vorlagenliterale, indem ein erwarteter Operator zwischen zwei Backticks eingefügt wird
quelle
Rockstar ,
45 BytesDurchgestrichen 4 ist noch 4 :(
Rockstar ist eine sehr ... wortreiche Sprache.
Während
"
kann verwendet werden , um eine Zeichenfolge, wie zu definierenPut "Hello" into myVar
es, mein Wissen gibt keine Möglichkeit für 3 Zitate außerhalb eines Kommentars zu erscheinen, und die Nähe sorgt für paren das wird in Klammern auch nicht (Kommentare in Rockstar passiert eingeschlossen, wie diese).Rockstar hat auch eine poetische wörtliche Syntax, in der die Zeichensetzung ignoriert wird. Die neue Zeile stellt also sicher, dass die drei Anführungszeichen den Anfang einer Codezeile bilden, die immer ungültig sein sollte
quelle
(()""")
, wäre das nicht ein No-Op?""")
als Code analysiert, der ungültig istGoethe says )"""
ist also gültig .)
und"""
Powershell,
1081214131416 Bytes-2 Byte dank Mazzy, der dank IsItGreyOrGray einen besseren Weg findet, es
zu knacken +4 -1 Byte
Ich hoffe das funktioniert.
'
und"
um Anführungszeichen#>
zu vermeiden, den Blockkommentar zu unterbrechen, neue Zeilen, um den einzeiligen Kommentar zu stoppen,'@
und"@
um einen anderen Zeichenfolgestil abzufangen, und startet dann ein falsches Array, um einen Syntaxfehler auszulösen.Die Logik ist, dass sie keinen Satz von Anführungszeichen verwenden können, um hineinzukommen, sie können ihn nicht auskommentieren. Wenn
@"
verwendet, wird ein Here-String erzeugt, der danach kein Token haben kann, und wenn sie Lass es in Ruhe, es wird versuchen, ein kaputtes Array zu erstellen. Diese Aussage will so hart leben, ich finde immer noch mehr Löcher in der Rüstung.quelle
@=
Runenverzauberungen, 3 Bytes
Eine von vielen möglichen Variationen.
Probieren Sie es online!
Runic verwendet die Unicode-Kombination von Zeichen in einem "
M
Ändert das Verhalten vonC
" (wobeiC
ein Befehl ist). Aus diesem Grund dürfen keine zwei Modifikatoren denselben Befehl ändern, und der Parser gibt einen Fehler aus, wenn ein solches Vorkommen gefunden wird.In ähnlicher Weise können bestimmte Befehle, die die IP umleiten, auf keine Weise geändert werden, da richtungsändernde Änderungszeichen vorhanden sind (und beide in derselben Zelle keinen Sinn ergeben).
Es gibt keine Möglichkeit, die Zeichenfolge zu entkommen oder sie wörtlich zu verwenden, um sie gültig zu machen. Tio Link enthält ein
;
, um den Fehler "kein Abschlusszeichen" mit höherer Priorität zu umgehen.quelle
TI-Basic (83+ / 84+ / SE, 24500 Byte)
(24500 Mal)
TI (-83 + / 84 + / SE) -Basic prüft die Syntax nur für Anweisungen, die es erreicht, sodass auch 5000
End
Anweisungen in einer Zeile mit einem übersprungen werden könnenReturn
. Dies kann im Gegensatz dazu nicht in den RAM eines TI-83 + / 84 + / SE passen, daher kann kein Programm diesen String enthalten. Ein bisschen konservativ mit der Anzahl der Charaktere.Der ursprüngliche TI-83 verfügt über 27000 Byte RAM.
A
In diesem Fall benötigen Sie 27500 s.TI-Basic (89 / Ti / 92 + / V200, 3 Byte)
Newline, Zitat, Newline. In der neuen Zeile werden alle Kommentare geschlossen (und das Einbetten des unzulässigen Zeichens in eine Zeichenfolge ist nicht zulässig, da AFAIK-Konstanten für mehrzeilige Zeichenfolgen nicht zulässig sind). In der anderen Zeile wird das Schließen der Zeichenfolge nicht zulässig, und im Anführungszeichen wird ein Syntaxfehler angezeigt.
Sie können mit auf 2 Bytes kommen
ohne die newline, aber ich bin mir nicht sicher, ob das zählt, weil
±
es nur in string konstanten gültig ist.quelle
Los , 6 Bytes
Versuchen Sie es online zu knacken!
Der gravierende Akzent (`) markiert ein unformatiertes Zeichenfolgenliteral, in dem alle Zeichen außer`, einschließlich Zeilenumbrüchen und umgekehrten Schrägstrichen, als Teil der Zeichenfolge interpretiert werden. Drei `s in einer Reihe sind der Kern: benachbarte String-Literale sind ungültig und` schließen immer einen ` String, so dass es keinen Sinn gibt, sie zu verstehen. Ich musste 3 weitere Bytes als Umgehungsschutz verwenden, eine neue Zeile, damit wir uns nicht in einem einzeiligen Kommentar oder einer normal zitierten Zeichenfolge befinden können, und ein * /, damit wir uns nicht in einem mehrzeiligen Kommentar befinden können.
quelle
SILOS , 4 Bytes
Silos ist wettbewerbsfähig \ o /
SILOS läuft auf einem Interpreter / Compiler mit zwei Durchläufen. Vor der Ausführung versucht ein "Compiler", die Quelle in ein Array zu vereinfachen, das die Quelle beschreibt. Jede Zeile wird separat behandelt. x + a ist ein Zuweisungsoperator, der ea zum Wert von x hinzufügt und in x speichert. Der "Compiler" wird jedoch brechen. Daher nehmen wir diese Zeichenfolge und fügen eine neue Zeile hinzu, bevor und nachdem sichergestellt ist, dass sie in einer eigenen Zeile steht und den Compiler unterbricht.
Probieren Sie es online!
quelle
ax+
Fehler raus?AutoHotkey , 5 Bytes
`ist das Fluchtzeichen. Sie können ein "nur entziehen, wenn Sie es einer Variablen zuweisen.
\ n * / verhindert, dass es auskommentiert oder einer Variablen zugewiesen wird.
quelle
JavaScript, 11 Zeichen
Die Backticks sorgen dafür, dass Template-Strings getötet werden, die Anführungszeichen werden von Strings befreit, die Newline vermeidet kommentierte Zeilen, das Ende des Kommentars vermeidet Block-Kommentare und das letzte Backtick und Escape (mit einem!, Um das Anhängen von Zahlen zu vermeiden) versuchen, ein ungültiges zu starten Zeichenfolge.
Probieren Sie es online!
quelle
)
nach der\u
, vielleicht würde das hier funktionieren?