Ist es nicht ärgerlich, wenn Sie einen Code finden und nicht wissen, in welcher Sprache er geschrieben wurde? Diese Herausforderung versucht dies zu lösen.
Herausforderung
Sie müssen ein Programm schreiben, das bei Ausführung in zwei verschiedenen Sprachen die Zeichenfolge ausgibt:
This program wasn't written in <language program compiled/interpreted in>, it was built for <other language the program can be run in>!
In der Ausgabe sollten Sprachnamen die offizielle Groß- und Kleinschreibung haben. zB: CJam, C ++
Keines der Programme sollte Eingaben vom Benutzer entgegennehmen.
Wenn die Ausgabe in beiden Sprachen ausgeführt wird, sollte sie auf stdout oder gleichwertig sein.
In beiden Programmen sollte keine Ausgabe an stderr erfolgen.
Sie können Kommentare in beiden Sprachen verwenden.
Zwei verschiedene Versionen derselben Sprache zählen als verschiedene Sprachen.
In diesem Fall sollte das Programm die Hauptversionsnummer ausgeben und bei Ausführung auf zwei verschiedenen Nebenversionen auch die Nebenversion melden.
Sie sollten keine vorgefertigten Versionsfunktionen verwenden (dies schließt Variablen ein, die bereits zur Laufzeit ausgewertet wurden).
Beispielausgabe:
Perl und Ruby:
Perl:
This program wasn't written in Perl, it was built for Ruby!
Rubin:
This program wasn't written in Ruby, it was built for Perl!
Python und C:
Python:
This program wasn't written in Python, it was built for C!
C:
This program wasn't written in C, it was built for Python!
Python 2 und Python 3:
Python 2:
This program wasn't written in Python 2, it was built for Python 3!
Python 3:
This program wasn't written in Python 3, it was built for Python 2!
Python 2.4 und Python 2.7:
Python 2.4:
This program wasn't written in Python 2.4, it was built for Python 2.7!
Python 2.7:
This program wasn't written in Python 2.7, it was built for Python 2.4!
Dies ist Codegolf, also gewinnt der kürzeste Code in Bytes.
argv[0]
?Antworten:
Foo / CJam, 70 Bytes
Wie viele herausgefunden haben, druckt Foo einfach alles in doppelten Anführungszeichen und ignoriert die meisten anderen Zeichen oder führt etwas aus, das die Ausgabe in den meisten Fällen nicht beeinflusst. Kurz gesagt:
\@
Tut nichts und die Zeichenfolgen werden wie sie sind gedruckt.Vertauscht in CJam
\
die beiden obersten Elemente und@
verschiebt das dritte Element nach oben, wodurch die Zeichenfolgen in der richtigen Reihenfolge angeordnet werden. Und nachdem das Programm beendet ist, wird automatisch alles gedruckt, was noch im Stapel ist.quelle
R"This program wasn't written in ""Fission"", it was built for ""CJam"\@'!O
"This program wasn't written in Clip, it was built for CJam!"3{4-_36+e\}/
für Clip / CJam.C89 / C99,
171152136114111107105 BytesVielen Dank an @Hurkyls, @Qwertiys, @ jimmy23013 und @MD XF für Ihre Hinweise.
Golf Version:
ungolfed version:
Kleine Beschreibung:
C-Versionen vor C99 hatten nur den folgenden mehrzeiligen Kommentar:
Mit C99 wurde der einzeilige Kommentar eingeführt. so was:
Also, wenn Sie eine Zeile wie diese kompilieren:
der für den c99 compiler compilerbezogene code wäre:
während der für einen c89 compiler relevante code wäre:
(da der erste
/
nicht Teil eines Kommentars ist und daher als Operator behandelt wird)quelle
//**/
. In C89 ist dies der Divisionsoperator, gefolgt von einem leeren Kommentar.//
Beginnt in C99 einen einzeiligen Kommentar, sodass der Rest der Zeile leer ist. Daher wird es in C89 zu(90-(-4.5/-4.5))
89, während es in C99 zu(90-(-4.5-4.5))
99 wird.188-c
anstelle vonc==99?89:99
.JavaScript / Ruby, 170 Byte
Könnte nur 2.0 sein, scheint nicht in mindestens 2.1.5 zu funktionieren ... Bearbeiten: Updates laut Rat von @Jordan, hoffentlich funktioniert es jetzt in ein paar weiteren Versionen!
Missbraucht den
~
Operator, indem Ruby=~
als reguläre Übereinstimmung behandelt und die Position der ersten Übereinstimmung in der Zeichenfolge zurückgibt (0
), aber JavaScript behandelt sie so, wie=
~/1/
sie ist-1
(da für numerische Operationen/1/
konvertiertNaN
, die einen0
Wert haben).quelle
NoMethodError: undefined method `log' for :log:Symbol
eval
zurückgegeben wird:log
. Ich denke, Sie könnten es beheben, indem Sie;c
nachher setzenend
. Der=~
/= ~
trick ist aber super!$><<s
anstelle vonputs s
Anführungszeichen verwenden und doppelte Anführungszeichen verwenden, damit Sie den umgekehrten Schrägstrich einfügen könnenwasn\'t
.\'
in Anführungszeichen gesetzten Zeichen bemerkt habe. Das$><<
bedeutet, dass ich die von Ihnen erwähnte Korrektur anwenden und die gleiche Byteanzahl beibehalten kann.Python 2 / Python 3, 92
Verwendet die "Standard" -Python-Versionsprüfung (Ganzzahl- / Gleitkommadivision).
quelle
Angeln / > <>
233217 BytesFischen ist eine Sprache, die auf einem Fischer basiert, der um den Fang von Fischen herumgeht. Um ein Programm in dieser Sprache zu erstellen, muss zuerst ein Dock definiert werden, auf dem er herumläuft. Das Dock bietet nur Steuerungsfluss für ein Programm. Das Dock in diesem Programm ist:
Immer wenn der
C
Befehl gefunden wird, wirft der Fischer seine Leine aus, um eine Anweisung zu fangen. Die Anweisungen+
und-
verringern bzw. erhöhen die Länge seiner Zeile.v
ändert seine Wurfrichtung nach unten. Die Fische, die er in diesem Programm fängt, sind:> <> ist eine Sprache, die auf einem Fisch basiert, der sich durch das Wasser bewegt. Der
v
Befehl startet die Bewegung des Fisches nach unten, wo er dann mit dem\
Befehl nach rechts reflektiert wird . Alles zwischen Anführungszeichen wird auf den Stapel geschoben. Nachdem die Schnur auf den Stapel geschoben wurde, wickelt sich der Fisch auf die andere Seite, wo er von nach unten reflektiert wird\
. Anschließend druckt es den Inhalt des Stapels aus mit:quelle
23 / Malbolge, 5688 Bytes
Beachten Sie, dass das Programm einen nachgestellten Zeilenvorschub benötigt. Keine Zeile enthält nachgestellte Leerzeichen, daher sollte das Kopieren / Einfügen problemlos funktionieren.
Nachprüfung
Um den Malbolge-Code in diesem Online-Interpreter zu testen , fügen Sie ihn in den Malbolge-Codebereich ein und klicken Sie Load/Resetdann auf Execute.
Um den 23 - Code in Test dieses Online - Interpreter , es in der Paste Quelle Bereich, drücken Sie Enterden abschließenden Zeilenvorschub, Typ einfügen
23
im Konsolenbereich (Umschaltung von dem Standard 23.dezsy Notation automatischer Erkennung) und klicken Sie auf Run Interpreter!.quelle
Lua / C -
182164 BytesNutzt die Funktion, bei der Lua ein Hash-Zeichen in der ersten Zeile als Kommentar behandelt, um Unix-Schebangs zuzulassen. Andernfalls werden die Kommentare der anderen Sprache in eigene Kommentare eingeschlossen.
Um Bytes zu rasieren, verlasse ich mich auf implizites Verhalten, das nur Warnungen in GCC und Clang ausgibt: implizite Deklaration von int für die Haupt- und implizite Definition von printf.
quelle
//
Kommentar im C-Teil verwenden? Spart 2 Bytes.JavaScript / Haskell,
158 Bytes147 BytesAllgemeine Idee: Schleichen Sie die Kommentar-Syntax eines jeden in den anderen.
In einer Zeile:
Wie das für Haskell aussieht:
Wie das für JavaScript aussieht:
quelle
alert
ist golfer.Brainfuck / Foo, 769 Bytes
Eine äußerst komplizierte und komplexe Antwort ... oder auch nicht.
quelle
,
Textes am Ende auf Eingaben . Ich glaube das verstößt gegen die Zuweisungsregeln.,
setzt nur die Zelle auf 0, für EOFC / Python, 238 Zeichen
Dies druckt nicht 100% genau das, was gewünscht wird, aber ziemlich nahe.
Ein Neustart meiner Valentinstagskarte .
quelle
def
und:
nachdef main()
, und Sie öffnen tatsächlich keinen Funktionskörper für main. Haben Sie tatsächlich versucht, Ihre Antwort in C zu kompilieren?#define def main(){0?
fehlt#define return
bringt mich ein wenig zum weinen ...C / C ++, 136
Zeilenumbrüche zur Formatierung hinzugefügt. Versuchen Sie es in C oder C ++ .
quelle
struct{}s;z=2*sizeof s
Befunge / > <> ,
141138134133130 Bytes3 Bytes gespart dank @Cole .
Um genau zu sein, verwende ich Befunge-98.
Mit den Fakten, die:
\
ist ein Spiegel in> <> und tauschen in Befunge'string'
ist ein String in> <> und'c
ein Zeichen in Befungequelle
?!;>ol
PHP / MySQL, 147 Bytes
quelle
SELECT"This program wasn't written in MySQL, it was built for PHP!";
Python 3 / > <> ,
177173172167 BytesVielen Dank an @mathmandan für das Rasieren von 5 Bytes!
Nun, das war eine Erfahrung, und es war auch eine anstrengende. Vorschläge zum Golfen sind willkommen, da dies ziemlich lang ist. Ich habe mein Bestes versucht, um Text wiederzuverwenden, aber es war ziemlich schwierig.
Technisch wäre es Python 3, das dieses Programm ausgeben sollte (und ich könnte das ändern, wenn ich die Spezifikationen nicht erfülle - aber im Beispiel wurde die Python / C-Ausgabe
Python
aufgelistet).Probieren Sie es mit einem Online-Interpreter> <> und einem Python 3-Interpreter aus (für den Interpreter > <> müssen Sie den Code manuell eingeben).
Kehrt zurück
in> <> und
in Python.
Erklärung (Python)
Für die Python-Seite ist es ziemlich einfach. Hier ist der Code, den wir interessieren (im Grunde der Code ohne Kommentare, die
#
in Python mit einem gekennzeichnet sind ). Beachten Sie, dass in Python\
ein Escape-Zeichen ist, wenn es in Zeichenfolgen verwendet wird, sodass\"
es"
in der Zeichenfolge ausgewertet wird .Was uns hier am meisten interessiert, sind die Operationen, die für die Variable ausgeführt werden
aa
:Die print-Anweisung wird somit zu ausgewertet
Erklärung (> <>)
Jetzt kommen wir zum schwierigeren Teil. Hier noch einmal der Code, bei dem die unnötigen Bits entfernt wurden.
Linie 1:
Der Stapel im Moment (falls gedruckt):
\This program wasn't written in
Zeile 2:
Beachten Sie, dass Zeile 2 an der
/
Position des Zeigers von Zeile 1 beginnt und von rechts nach links verschoben wird.Der Stack im Moment:
><> ni nettirw t'nsaw margorp sihT
Zeile 3:
Wie die vorherige Zeile beginnt diese an der Stelle
\
, an der Zeile 2 den Zeiger sendet. Beachten Sie, dass, da der Zeiger beim Erreichen der ersten Zeile um die Zeile herum verläuft,a
ich meine Erklärung in der Reihenfolge schreiben werde, in der der Zeiger sich befindet (und damit, was ausgeführt wird).Der Stapel im Moment (
x
ist das Zeichen, das durch Hinzufügen von "r" und einem Leerzeichen gebildet wird. - Es ist nicht das eigentliche Zeichen, sondern nur ein Platzhalter von mir):xof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
Zeile 4:
Der Zeiger fährt einfach nach unten fort, sodass diese Zeile keine weitere Erklärung verdient.
Zeile 5:
Beginnen Sie bei
/
und gehen Sie nach links.Der Stack im Moment (die Ausgabe ist umgekehrt):
!nohtyP rof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
Und das sollte es für die Erklärung sein. Lassen Sie mich wissen, ob die Erklärung / der Code inkonsistent ist oder ob ich etwas falsch gemacht habe. Ich habe meinen Code noch ein wenig runtergespielt, als ich gerade die Erklärung schrieb, damit ich vielleicht ein bisschen alten und neuen Code gemischt habe.
quelle
aa[:-2][::-1]
mitaa[-3::-1]
. In diesem Fall kann das natürlich die> <> -Formatierung beeinträchtigen, aber es lohnt sich vielleicht zu überlegen, ob Sie dies noch nicht getan haben. Insbesondere bin ich mir ziemlich sicher, dass Sie ein Leerzeichen unter derv
vorherigen Zeile benötigen , aber es sieht so aus, alsprint(aa[-3::-1]+"Pytho"
würde es in die folgenden 24 Zeichen passena=", it was built for "+
, und dann könnten Sie ein Leerzeichen gefolgt von einfügen+"n"+a)
. Ich bin nicht sicher, ob dies etwas anderes kaputt machen würde, aber wenn es funktioniert, werden ein paar Bytes gespart.print aa[-3::-1]+"Pytho" +"n"+a
. Eine andere Frage: Was passiert in der> <> -Version mit der1
, die ursprünglich auf den Stapel geschoben wurde?Batch .BAT-Datei / Batch .CMD-Datei,
194185 BytesEdit: 9 Bytes gespeichert und ein fehlendes
!
dank DLosc korrigiertJa, es gibt Unterschiede zwischen BAT- und CMD-Dateien. Referenz. Im Wesentlichen setzt CMD den Befehl
ERRORLEVEL
onSET
, während BAT dies nicht tut. Dies bedeutet, dass derERRORLEVEL
durch den fehlerhaftenmd
Befehl festgelegte WertSET v=1
in der einen Version gelöscht wird, in der anderen jedoch nicht. Dieses Skript basiert auf dem Beispiel von "Ritchie" in diesem Newsgroup-Thread.Beachten Sie, dass das obige verkürzte Skript
ENABLEEXTENSIONS
als festgelegt vorausgesetzt wirdON
(standardmäßig auf jeder Plattform). Das erweiterte Skript unten legt es explizit fest, um die korrekte Funktionalität zu gewährleisten. Andernfalls lässt derSET
Befehl für CMD nicht alle Erweiterungen zu und setzt sie möglicherweise (auf einigen Systemen) nichtERRORLEVEL
richtig.Erweitert und bemerkt
quelle
Javascript / C,
148146143 ZeichenC:
http://codepad.org/u8UimGLchttp://codepad.org/Y80M5jpchttp://codepad.org/m4DB2NddJavascript: Kopieren Sie einfach den Code in die Browser-Konsole
quelle
CJam / GolfScript,
8178 BytesUrsprüngliche 81-Byte-Version:
quelle
PHP / Perl,
9896 BytesKeine Ahnung, ob dies ein Betrug ist oder nicht, da es meines Erachtens die einzige Möglichkeit ist, PHP ohne Eröffnungs-
<?
Tag auszuführenphp -r $(cat codefile.php)
. Aber vorausgesetzt, das ist legal ...//
ist ein PHP-Kommentar, aber in Perl ist es ein regulärer Ausdruck (der in einer Aussage für sich genommen nichts bewirkt). Der Rest sollte ziemlich selbsterklärend sein.Bearbeiten: Verwenden Sie jetzt ein Bareword im Perl-only-Teil. Ich wollte diese in erster Linie für beide Sprachen verwenden, aber PHP zeigt eine Warnung an, wenn Sie dies tun, im Gegensatz zu "Es sollte keine Ausgabe für stderr geben."
quelle
<?'>#';
ist gültige Syntax in beiden Sprachen.Ruby / Python, 105 Zeichen
quelle
JavaScript 1.8 / JavaScript 1.7, 89 Bytes
Weil Array.prototype.reduce in 1.8 neu ist
BEARBEITEN : 7 Bytes durch direktes Initialisieren
a
anstatt Verwenden herausgesuchtreverse()
BEARBEITEN:
JavaScript
kann so geschrieben werdenJS
, dass 8 Byte gespart werdenEDIT: Danke Hedi für den Hinweis, dass ich 3 weitere Bytes sparen kann, wenn ich die Variable
b
nicht mehr benutzeBEARBEITEN : 6 Bytes durch Berechnen herausgesucht
7+a
und8-a
,a=1
wenn Reduzieren definiert ist (JS 1.8) unda=0
wenn es nicht definiert ist (JS 1.7)BEARBEITEN : Hedi hat 6 weitere Bytes ausgegeben, was auf die Verwendung einer Template-Zeichenfolge hindeutet
EDIT: ETHproductions hat 2 Bytes vorgeschlagen
a=!![].reduce;
anstatta=[].reduce?1:0;
BEARBEITEN : no1xsyzy hat ein weiteres Byte herausgespielt und schlägt vor, den Booleschen Check umzukehren
quelle
a=[].reduce?1:0;
zua=!![].reduce;
.a
den Wert halten1
oder0
, nichttrue
oderfalse
SWI-Prolog 6 / SWI-Prolog 7, 156 Bytes
Verwendet die Tatsache, dass doppelte Anführungszeichen
""
in SWI-Prolog-Versionen, die älter als 7 sind, Zeichenfolgencodes (dh eine Liste von Zeichencodes) sind undis_list("")
in Version 7 einen geeigneten Zeichenfolgentyp darstellen. Dies ist in Version 7 falsch und in früheren Versionen wahr.quelle
BF / SPL, 5342 Bytes
Ich bin mir ziemlich sicher, dass dies der erste mehrsprachige Shakespeare-Programmierer auf dieser Site ist.
Ich werde wahrscheinlich keine Preise gewinnen. Schleicht BF-Code in Act / Scene / Program-Titel. Der SPL-Code verwendet bis auf wenige Fälle Ausrufezeichen anstelle von Punkten. Die Programme dürfen keine Eingaben machen, daher werden die Kommas in den Zeichendeklarationen "auskommentiert", indem Zellen auf Null gesetzt und eckige Klammern um die Kommas gesetzt werden. Das gleiche Verfahren gilt, wenn die eckigen Klammern um die enter / exeunt-Anweisungen ausgeblendet werden.
Testen Sie BF unter https://repl.it/E8Hh/23 .
Der SPL-Code wurde beim Compiler getestet, der hier zu finden ist: https://github.com/drsam94/Spl/ .
quelle
Ruby 1.8 / Ruby 1.9, 87
In Ruby 1.8
?9
ist dies der ASCII-Wert von "9", 8 modulo 49. In Ruby 1.9 ist dies die Zeichenfolge "9" und%49
eine Formatierungsoperation, die nichts bewirkt, da "9" keine Formatzeichenfolgen enthält es.quelle
Python 2.7.9 / Python 2.7.10, 127 Byte
Wir hatten ein paar Posts, in denen kleinere Versionen verwendet wurden, aber keine, die in die nächsthöhere Stufe gegangen sind ...
Probieren Sie es auf Ideone (Python 2.7.10) und repl.it (technisch Python 2.7.2, sollte aber das gleiche Ergebnis wie 2.7.9 liefern).
Python 2.7.10 laut Changelog :
Dies wurde
len(dir(types))
von 42 auf 43 verschoben, was einen numerischen Unterschied ergibt, den wir ausnutzen können, um die gewünschte Ausgabe zu erzeugen.quelle
Python / QBasic,
160 bis142 ByteGetestet mit Python 3 und QBasic 1.1 . Funktioniert nicht in Python 2, ohne
from __future__ import print_function
Zeile 4 hinzuzufügen .1#
folgt auf den Ausdruck1
(no-op) ein Kommentar. In QBasic ist es eine Zeilennummer (mit dem Typensuffix alsDOUBLE
). DieDEFSTR
Anweisung teilt QBasic mit, dass alle Variablen, deren Namen mitA
oderB
(ohne Berücksichtigung der Groß- / Kleinschreibung) beginnen, Zeichenfolgenvariablen sind. Auf diese Weise können wir unsere Variablena
undb
anstelle vona$
und aufrufenb$
(was in Python nicht funktioniert).'
einen Kommentar. Ist in Python''
die leere Zeichenfolge (no-op). Dann tauschen wir die Sprachnamen aus und definieren einen Alias für dieprint
Funktion (da die QBasic-Schlüsselwörter automatisch in Großbuchstaben formatiert werden).Wenn ich den Autoformatierer ausschalten darf (eine Option in QB64 , aber nicht im ursprünglichen QBasic), kann ich ihn mit Python 2 auf 114 Bytes reduzieren :
quelle
Perl / Ruby, 129 Bytes
Kein Missbrauch von regulären Ausdrücken in diesem Beispiel, nur das Beste aus der Tatsache, dass 0 in Ruby wahr ist, zu
eval
einer Definition fürsort
(was eigentlich istreverse
) undprintf
ing. Ruby mochte es nicht, die Liste für die Argumente zu verwenden, also musste ich jedes einzeln durchführen.quelle
a
eine Instanzvariable im Gegensatz zu einer lokalen Variable sein?@
Zeichen für eine Variable in Perl gibt an, dass es sich um eine Liste handelt. Wenn Perl beispielsweise in speichert,$a
wird keine Ausgabe ausgegeben./// und Retina , 95 + 3 = 98 Bytes
+3 Bytes für die
-s
Flagge in der Netzhaut.Erklärung für ///
Die erste Anweisung ist
Entfernt alle Zeilenumbrüche aus dem Rest des Codes, was dazu führt, dass
Alles bis zum
!
ist nur ein Literal und wird an STDOUT gedruckt. Die nächste Anweisung istDie Suchzeichenfolge
?.
kann jedoch nicht gefunden werden, sodass nichts passiert. Dann ist der verbleibende Code//!
eine unvollständige Anweisung, sodass das Programm beendet wird und die richtige Zeichenfolge gedruckt wurde.Erklärung für die Netzhaut
Dies sagt Retina zu ersetzen
/
mit//
. Die Eingabe ist jedoch leer, sodass sie mit nichts übereinstimmt.Dadurch wird die Eingabe durch die Zeichenfolge in der zweiten Zeile ersetzt.
Dies stimmt mit der Zeichenfolge überein
\/\/\/, it was built for Retina!
und ersetzt sie durchRetina, it was built for ///!
, um das richtige Ergebnis zu erzielen.quelle
-s
, obwohl zu sagen, was ich getan habe, den Spaß verderben würde! : Dsed / Hexagony 251 Bytes
sed: Online ausprobieren!
Hexagony: Probieren Sie es online!
In sed wird die richtige Zeichenfolge ausgegeben, wenn sie (immer) mit der leeren Zeichenfolge am Ende übereinstimmt. Die zweite Zeile ist ein Kommentar. Dies erfordert eine Zeichenfolge für STDIN, kann jedoch leer sein ( basierend auf diesem Konsens zulässig ).
Beispiel:
In Hexagony werden die ersten
/
Umleitungen nach links unten ausgeführt. Sie folgen der linken Seite bis zu dem Punkt, an dem der Sed-Teil beginnt. Anschließend werden die Zeilen von links nach rechts, von rechts nach links, eine Zeile nach unten usw. umbrochen . Das erweiterte Hex sieht folgendermaßen aus:quelle
;
die aktuelle Zellenmodifikation 256 verwendet wird, um einen Bytewert zu bestimmen (z. B. können Sie ein Leerzeichen mitP0;
unabhängig vom aktuellen Zellenwert drucken ). Dieses CJam-Skript generiert alle Paare: cjam.tryitonline.net/…Python / Retina,
133120119117115 BytesJetzt, wo ich mehr über Retina und Regexes weiß, habe ich ein bisschen mehr Golf gespielt. Es funktioniert jetzt auch tatsächlich.
Python druckt nur die Anweisung. Retina ersetzt alles durch die Python-Druckanweisung und entfernt dann die
print
und Anführungszeichen. Dann tausche ichPython
undRetina
und entferne die#
.Versuchen Sie es in Python | Versuchen Sie es in Retina
quelle
JavaScript / CoffeeScript,
125 -124 ByteIn CoffeeScript
a==b
wird bis kompilierta===b
, wodurch die Zwischenbedingung falsch wird. Ich habe ein bisschen Magie benutzt, um den Booleschen Wert in eine Ganzzahl umzuwandeln.Dank @DomHastings 1 Byte gespart!
125-Byte-Version:
quelle
+(b=0=='0')
statt+0
!b^1
denke ich, können Sie verwenden~b
undefinedScript
.~1 == -2
. Aber(b=0=='0')+0
kann geschrieben werden+(b=0=='0')
. Oderb=+(0=='0')
. Das sollte 1 Byte abschneiden.