Konvertieren Sie JSF ** k in normales JS

12

Viele von Ihnen kennen JSF ** k bereits . Für diejenigen, die dies nicht tun, ist es ein Skript, das im Grunde genommen jeden JavaScript-Code in etwas verwandelt, das nur unter Verwendung von geschrieben wurde []()!+.

Ihre Aufgabe ist es, mit jeder Sprache Ihrer Wahl ein Programm zu erstellen, das JSF ** k in unverschlüsseltes JavaScript konvertiert.

  • Eingabe : Eine Zeichenfolge mit gültigem JSF ** k-Code.
  • Ausgabe : Ein String mit dem regulären JavaScript-Code, der zuvor von JSF ** zur Generierung der Eingabe erstellt wurde.

Berücksichtigen Sie für diese Herausforderung, dass die Eingabezeichenfolge nur einmal JSF ** -geprüft wurde.

Dies ist ein Wettbewerb, bei dem der kürzeste Code in Bytes gewinnt.

William Barbosa
quelle
@Michael aber ist die Kodierung eindeutig wieder rückgängig zu machen? Ich glaube nicht ... wie entscheide ich, ob ein [...]Array-Zugriff Teil des ursprünglichen Codes oder Teil der Verschleierung war? Das gleiche gilt für alle anderen Konstrukte.
Martin Ender
2
@JanDvorak oh was ... das ist so kontraproduktiv ... wir könnten ihm helfen, diese Frage zu schließen und zu stimmen, anstatt abzustimmen.
Martin Ender
2
@m.buettner Ich habe downvoted, weil ich nicht das Gefühl habe, dass die Frage irgendwohin geht. Ich möchte auf keinen Fall einen Beitrag verbessern, nur um einige Privilegien für jemanden freizuschalten.
John Dvorak
2
@JanDvorak Ich denke, wir sollten neue Benutzer nicht entmutigen, die gute Herausforderungen schreiben und auf Kritik hören möchten . Da die Sandbox ist auf Meta und dort bleiben wird, ist downvoting kontraproduktiv. Das Schließen ist völlig ausreichend. Ich denke nicht, dass eine einzige Aufwertung irgendjemandem schaden würde, und es würde dem Benutzer die Chance geben, tatsächlich einen Eintrag in diese Community zu finden. Aber jemand hat dir zugestimmt und beschlossen, auch eine Ablehnung vorzunehmen, weil zum Teufel, warum sollte es neuen Benutzern erlaubt sein, in der Sandbox zu posten (nehme ich an) ... und jetzt kann er immer noch nicht dort posten. Ich glaube nicht, dass wir so diese Gemeinschaft aufbauen.
Martin Ender
1
Können Sie bitte eine Erklärung hinzufügen, was normales JavaScript bedeutet? Es ist möglicherweise nicht offensichtlich, wie die Rücktransformation durchgeführt werden muss. ZB wenn ich den Obfustator bei einer netten Eingabe zweimal durchlaufe, was ist die vorgeschlagene Ausgabe? Das ursprüngliche Programm oder die Eingabe, die bereits verschleiert wurde?
Howard

Antworten:

12

Javascript - 68 55 51

alert(/\n(.+)/.exec(eval(prompt().slice(0,-2)))[1])

Alternativ: (gleiche Länge)

alert(/.+(?=\n})/.exec(eval(prompt().slice(0,-2))))

Läuft in der Konsole Ihres Browsers. Funktioniert garantiert nur mit von jsfuck.com generiertem Code, wenn die Option "Eval Source" aktiviert ist.

Ungolfed:

alert(
    /\n(.+)/.exec(                 // regex to extract code from inside outer function braces {}
        eval(prompt().slice(0,-2)) // remove the final set of parens () and evaluate the code
                                   // this results in a function, which will be converted to a string as 'exec' expects a string
    )[1]                           // get the first capture group
)
nderscore
quelle
In einem von mir abgelehnten Bearbeitungsvorschlag schlug @ user3082537 vor, Regex anstelle von Slice zu verwenden, wie inreplace(/^.*\n|\n}$/g,'')
user12205
7

JavaScript, 122, funktioniert mit jeder Eingabe

s=prompt().slice(0,-2)
i=s.length
while(i--){if((l=s.slice(i)).split(')').length==l.split('(').length)break}alert(eval(l))

Ziemlich einfach; es geht einfach zurück in die Zeichenkette, bis die Klammern ( (und )) ausgeglichen sind. Die letzten drei Zeichen der JSF-Ausgabe sind immer vorhanden )() . Wenn Sie also die letzten zwei Parens abschneiden und dann den passenden Paren für den anderen finden, funktioniert dies immer. (Es funktioniert auch mit der Eingabe mit [].)

Türknauf
quelle