JSFuck ist eine esoterische Sprache, in der jede Javascript-Anweisung genau in einem anderen gültigen Javascript-Programm reproduziert werden kann, das nur die 6 Zeichen verwendet []()!+
.
Der JSFuck-Konverter erzeugt bei Eingabe von alert("Hello World!")
einen Codeblock mit einer Länge von 22.948 Zeichen. Da das Programm viele automatische Konvertierungen verwendet hat, um diesen Block zu erstellen, kann der Code meiner Meinung nach durch manuelle Optimierungen erheblich verkürzt werden.
Ihre Aufgabe ist es, ein Javascript-Programm zu erstellen, das die Aufgabe alert("Hello World!")
nur mit den Zeichen ausführt []()!+
. Der kürzeste Code dafür gewinnt.
$
und=
bitte auch? Ansonsten denke ich nicht, dass wir den Generator am besten können.Antworten:
JScrewIt (verschiedene Lösungen: 16117, 14747 und 5903 Zeichen)
Javascript-Engines sind nicht identisch. Geringe Implementierungsunterschiede können dazu führen, dass Code, der in einem Browser funktioniert, in einem anderen nicht funktioniert. Im Falle von lipogrammatischem Code wie JSFuck, der sich hauptsächlich auf Hacks stützt, um Dinge so kurz wie möglich zu codieren, sind die Inkompatibilitäten sogar noch größer.
Beispielsweise kann der von JSFuck für generierte Code
alert("Hello World!")
nicht in Internet Explorer ausgeführt werden. Wenn dies eine akzeptable Einschränkung ist, können wir die Größe dennoch auf 16117 bis22174Zeichenreduzieren(ich kann den gesamten Code nicht direkt einschließen, da dieAntwortgrößeauf 30000 Zeichen begrenzt ist):http://jsfiddle.net/ep2jqsj4/1/
Ein Code, der auch in Internet Explorer funktioniert, in einigen älteren Browsern jedoch nicht, benötigt 14747 Zeichen für die Codierung:
http://jsfiddle.net/bbxfqboq/
Wenn es in Ordnung ist, Code zu haben, der nur unter Firefox [Update] und Safari [Update beenden] ausgeführt wird , können wir dies mit 5903 bis
5911Zeichen tun :http://jsfiddle.net/pkyLy0j8/1/
Ich habe alle mit JScrewIt codiert . Andere ähnliche Encoder wie JSFuck finden Sie auf Esolang: http://esolangs.org/wiki/JSFuck . Ich habe alle ausprobiert und ich muss sagen, JScrewIt scheint das beste zu sein (und auch das einzige, das in allen Browsern funktioniert), obwohl ich nicht analysiert habe, wie es im Detail funktioniert.
Ein weiterer interessanter Encoder ist 6chars.js , der eine größere Ausgabe für kurze Eingaben generiert
alert("Hello World!")
, aber wenn die Eingabe länger wird, ist die Leistung besser als bei den anderen Encodern, da Zeichen als Zahlen codiert werden. Zahlen sind kürzer zum Schreiben in JSFuck, erfordern aber zusätzlichen Overhead zum Dekodieren. Leider funktioniert 6chars.js nur in Chrome und ich kann nicht sagen, ob es noch aktiv entwickelt wird.Es wäre interessant zu wissen, ob es mehr solcher Encoder gibt. Wenn man Methoden, die von verschiedenen Encodern verwendet werden, in einem Tool zusammenfassen könnte, wären noch kürzere Lösungen möglich.
quelle
JSFuck (15.863 Zeichen)
Nicht wirklich optimiert (nur 7.085 Zeichen), aber es ist nicht so, dass Optimierungen wirklich möglich sind, da JSFuck nur ein einfacher Sprach-Hack ist.
quelle
JSFuck, 18827
Konnte es nicht viel weiter runterholen. Autogenerierter Code, ich habe den lesbaren JS-Code für den Generator optimiert. Nur sehr wenige Optimierungen im JSFuck-Code.
quelle