JSF ** k를 일반 JS로 변환


12

많은 사람들이 이미 JSF ** k를 알고 있습니다. 그렇지 않은 사람들에게는 기본적으로 JavaScript 코드를을 사용하여 작성된 것으로 바꾸는 스크립트 []()!+입니다.

당신의 임무는 선택한 언어를 사용하여 JSF ** k를 난독 화되지 않은 JavaScript로 변환하는 프로그램을 작성하는 것입니다.

  • 입력 : 유효한 JSF ** k 코드를 가진 문자열.
  • Output : 입력을 생성하기 위해 이전에 JSF ** k되어있는 일반 JavaScript 코드가 포함 된 문자열입니다.

이 문제를 해결하려면 입력 문자열이 JSF **로 한 번만 입력 된 것으로 간주하십시오.

이것은 경연 대회이므로 가장 짧은 코드 (바이트)가 이깁니다.


@Michael이지만 인코딩이 확실하게 되돌릴 수 있습니까? 나는 그렇게 생각하지 않습니다 ... 일부 [...]배열 액세스가 원래 코드의 일부인지 난독 화 의 일부인지 어떻게 결정 합니까? 다른 모든 구성에서도 동일합니다.
Martin Ender

2
@JanDvorak 아 너무 비생산적이다 그 ... 우리가 무엇을 ... 수있는 이 질문을 폐쇄 그를 도와 upvoting 대신 downvoting.
Martin Ender

2
@ m.buettner 질문이 어디로 가고 있는지 느끼지 않기 때문에 다운 투표했습니다. 나는 누군가의 특권을 잠금 해제하기 위해 게시물을 공표하고 싶지 않습니다.
John Dvorak

2
@ JanDvorak 좋은 도전을하고 비판을 듣고 싶은 새로운 사용자를 낙담시키지 말아야한다고 생각합니다 . 샌드 박스 메타에 있고 그대로 유지되므로 다운 보팅은 비생산적입니다. 닫는 것으로 충분합니다. 나는 하나의 공감대가 누구에게나 해를 끼칠 것이라고 생각하지 않으며, 사용자가 실제로이 커뮤니티에 입장 할 수있는 기회를 줄 것입니다. 그러나 누군가가 당신과 동의하고 또한 공감하기로 결정했습니다. 왜냐하면 새로운 사용자가 샌드 박스에 게시 해야하는 이유는 무엇입니까? 나는 그것이 우리가이 커뮤니티를 성장시키는 방법이라고 생각하지 않습니다.
Martin Ender

1
일반적인 JavaScript의 의미를 설명해 주 시겠습니까? 역변환이 어떻게 수행되는지는 분명하지 않을 수 있습니다. 예를 들어 멋진 입력에서 obfustator를 두 번 반복하면 제안 된 출력은 무엇입니까? 원래 프로그램 또는 이미 난독 처리 된 입력입니까?
Howard

답변:


12

자바 스크립트 -68 55 51

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

대안 : (같은 길이)

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

브라우저 콘솔에서 실행됩니다. 'Eval Source'옵션이 선택된 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은 다음과 같이 slice 대신 regex를 사용하도록 제안했습니다.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 출력의 마지막 세 문자는 항상 )() 이므로 마지막 2 개의 스패너를 슬라이스 한 다음 다른 하나의 일치하는 패런을 찾는 것이 항상 작동합니다. (입력 []에서도 작동합니다 .)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.