JSF ** kを通常のJSに変換する


12

あなたの多くはすでにJSF ** kを知っています。そうでない人にとっては、基本的にJavaScriptコードをを使用して記述されたものに変換するスクリプトです[]()!+。

あなたの仕事は、JSF ** kを難読化されていないJavaScriptに変換するプログラムを、選択した任意の言語を使用して構築することです。

  • 入力:有効なJSF ** kコードを含む文字列。
  • 出力:以前にJSF **で入力を生成するために取得された通常のJavaScriptコードを含む文字列。

この課題では、入力文字列がJSF **で1回だけ化されていることを考慮してください。

これはコンテストなので、バイト単位の最短コードが勝ちます。


@Michaelしかし、エンコーディングは明確に元に戻すことができますか?私はそうは思わない...いくつかの[...]配列アクセスが元のコードの一部であるか難読化の一部であるかどうかをどのように判断するのですか?実際、他のすべての構成体についても同じです。
— マーティンエンダー

2
@JanDvorakああ...それはとても非生産的です...私たちは彼をこの質問を閉じ、ダウン投票の代わりにアップ投票で助けることができました。
— マーティンエンダー

2
@ m.buettner質問はどこにも行かないと感じているので、私はダウン投票した。誰かの特権をアンロックするためだけに、投稿に賛成したくはありません。
— ジョン・ドヴォルザーク

2
@JanDvorak 良いチャレンジを書き、批判に耳を傾けたい新しいユーザーを思いとどまらせるべきではないと思います。サンドボックスはメタ上にあり、そこにとどまるため、ダウン投票は逆効果です。閉めるだけで十分です。単一の賛成票が誰かに害を与えることはないと思います。そして、それはユーザーにこのコミュニティへのエントリーを実際に見つける機会を与えるでしょう。しかし、誰かがあなたに同意し、同様にダウン投票することに決めました。なぜなら、なぜ新しいユーザーがサンドボックスに投稿することを許可する必要があるのでしょうか(推測)... それが私たちがこのコミュニティを成長させる方法だとは思いません。
— マーティンエンダー

1
通常のJavaScriptの意味を説明してください。逆変換がどのように行われなければならないかは明らかでないかもしれません。たとえば、素敵な入力でオブファスタを2回繰り返す場合、推奨される出力は何ですか?既に難読化された元のプログラムまたは入力?
— ハワード

回答:


12

Javascript- 68 55 51

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

または:(同じ長さ)

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

ブラウザのコンソールで実行されます。「評価ソース」オプションをオンにしてjsfuck.comによって生成されたコードでのみ動作することが保証されています。

ゴルフをしていない:

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
)

私が拒否したことを示唆した編集では、@ user3082537のように、使用する正規表現の代わりに、スライスに提案replace(/^.*\n|\n}$/g,'')
— user12205

7

JavaScript、122、あらゆる入力で動作

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

ものすごく単純; 括弧((と))のバランスが取られるまで、文字列内に戻ります。JSF出力の最後の3文字は常に )()ですので、最後の2つの括弧を切り取り、次に他の括弧に一致する括弧を見つけることが常に機能します。(入力で[]も動作します。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.