Converti JSF ** k in JS normale


12

Molti di voi conoscono già JSF ** k . Per coloro che non lo fanno, è uno script che fondamentalmente trasforma qualsiasi codice JavaScript in qualcosa di scritto usando solo []()!+.

Il tuo compito è costruire, usando qualunque lingua tu scelga, un programma che converta JSF ** k in JavaScript non offuscato.

  • Input : una stringa con codice JSF ** k valido.
  • Output : una stringa con il normale codice JavaScript che è stato precedentemente JSF ** k per generare l'input.

Per questa sfida, considera che la stringa di input è stata JSF ** ked una sola volta.

Questa è una gara di , quindi vince il codice più breve, in byte.


@Michael ma la codifica è inequivocabilmente riverificabile? Non credo ... come faccio a decidere se un [...]accesso all'array faceva parte del codice originale o parte dell'offuscamento? lo stesso per tutti gli altri costrutti, davvero.
Martin Ender,

2
@JanDvorak oh che ... che è così controproducente ... abbiamo potuto aiutarlo con chiusura a questa domanda e upvoting invece di downvoting.
Martin Ender,

2
@ m.buettner Ho annullato il voto perché non penso che la domanda vada da nessuna parte. Non voglio assolutamente votare un post solo per sbloccare alcuni privilegi per qualcuno.
John Dvorak,

2
@JanDvorak Penso che non dovremmo scoraggiare i nuovi utenti che vogliono scrivere buone sfide e ascoltare le critiche. Poiché il sandbox è in meta e rimarrà lì, il downvoting è controproducente. La chiusura è totalmente sufficiente. Non credo che un singolo voto danneggerebbe chiunque e darebbe all'utente la possibilità di trovare effettivamente una voce in questa comunità. Ma qualcuno ha concordato con te e ha deciso di effettuare anche il downgrade, perché diamine, perché i nuovi utenti dovrebbero poter pubblicare nella sandbox (immagino) ... e ora non può ancora pubblicare lì. Non penso che sia così che facciamo crescere questa comunità.
Martin Ender,

1
Potete per favore aggiungere qualche spiegazione sul significato di JavaScript normale ? Potrebbe non essere ovvio come debba essere effettuata la trasformazione posteriore. Ad esempio, se do l'iteratore due volte su un bel input, qual è l'output suggerito? Il programma originale o l'input che era già offuscato?
Howard,

Risposte:


12

Javascript - 68 55 51

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

In alternativa: (stessa lunghezza)

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

Funziona nella console del tuo browser. Garantito solo per funzionare con il codice generato da jsfuck.com con l'opzione 'Eval Source' selezionata.

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
)

In una modifica suggerita che ho rifiutato, @ user3082537 ha suggerito di utilizzare regex invece di slice, come inreplace(/^.*\n|\n}$/g,'')
user12205

7

JavaScript, 122, funziona con qualsiasi input

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

Abbastanza semplice; ritorna nella stringa fino a quando le parentesi ( (e )) sono bilanciate. Gli ultimi tre caratteri dell'output JSF sono sempre )() , quindi tagliare sempre le ultime 2 parentesi e quindi trovare la parentesi corrispondente per l'altra funzionerà sempre. (Funziona anche con input con [].)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.