Chuyển đổi JSF ** k sang JS bình thường


12

Nhiều bạn đã biết JSF ** k . Đối với những người không sử dụng, đó là một tập lệnh về cơ bản biến bất kỳ mã JavaScript nào thành một thứ được viết chỉ bằng cách sử dụng []()!+.

Nhiệm vụ của bạn là xây dựng, sử dụng bất kỳ ngôn ngữ nào bạn chọn, một chương trình chuyển đổi JSF ** k thành JavaScript không được kiểm duyệt.

  • Dữ liệu vào : Một chuỗi có mã JSF ** k hợp lệ.
  • Đầu ra : Một chuỗi với mã JavaScript thông thường đã được JSF ** trước đó tạo ra đầu vào.

Đối với thử thách này, hãy xem xét rằng chuỗi đầu vào chỉ được JSF ** ked một lần.

Đây là một cuộc thi , vì vậy mã ngắn nhất, tính bằng byte, sẽ thắng.


@Michael nhưng mã hóa hoàn toàn rõ ràng? Tôi không nghĩ vậy ... làm thế nào để tôi quyết định xem một số [...]truy cập mảng là một phần của mã gốc hay là một phần của obfuscation? tương tự cho tất cả các cấu trúc khác, thực sự.
Martin Ender

2
@JanDvorak ồ ... thật là phản tác dụng ... chúng tôi có thể giúp anh ấy giải quyết câu hỏi này nâng cao thay vì hạ cấp.
Martin Ender

2
@ m.buettner Tôi đã đánh giá thấp vì tôi không cảm thấy câu hỏi đang đi đâu cả. Tôi chắc chắn không muốn nâng cấp bài đăng chỉ để mở khóa một số đặc quyền cho ai đó.
John Dvorak

2
@JanDvorak Tôi nghĩ chúng ta không nên khuyến khích những người dùng mới muốn viết những thử thách tốt và lắng nghe những lời chỉ trích. Kể từ khi hộp cát nằm trên meta và sẽ ở lại đó, nên việc hạ cấp là phản tác dụng. Đóng cửa là hoàn toàn đủ. Tôi không nghĩ rằng một upvote duy nhất sẽ gây hại cho bất cứ ai và nó sẽ cho người dùng cơ hội thực sự tìm thấy một mục vào cộng đồng này. Nhưng ai đó đã đồng ý với bạn và cũng quyết định downvote, bởi vì, tại sao người dùng mới nên được phép đăng trong hộp cát (tôi đoán vậy) ... và bây giờ anh ta vẫn không thể đăng bài ở đó. Tôi không nghĩ đó là cách chúng tôi phát triển cộng đồng này.
Martin Ender

1
Bạn có thể vui lòng thêm một số giải thích về ý nghĩa của JavaScript thông thường không? Có thể không rõ ràng làm thế nào để chuyển đổi trở lại phải được thực hiện. Ví dụ: nếu tôi lặp lại obfustator hai lần trên một số đầu vào đẹp, đầu ra được đề xuất là gì? Chương trình ban đầu hoặc đầu vào đã bị xáo trộn?
Howard

Câu trả lời:


12

Javascript - 68 55 51

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

Ngoài ra: (cùng chiều dài)

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

Chạy trong bảng điều khiển của trình duyệt của bạn. Chỉ được đảm bảo hoạt động với mã được tạo bởi jsfuck.com với tùy chọn 'Nguồn Eval' được chọn.

Ung dung:

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
)

Trong một chỉnh sửa được đề xuất mà tôi đã từ chối, @ user3082537 đã đề xuất sử dụng regex thay vì lát, như trongreplace(/^.*\n|\n}$/g,'')
user12205

7

JavaScript, 122, hoạt động với mọi đầu vào

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

Khá đơn giản; nó chỉ quay trở lại trong chuỗi cho đến khi dấu ngoặc đơn ( ()) được cân bằng. Ba ký tự cuối cùng của đầu ra JSF luôn luôn )() , do đó, cắt bỏ 2 parens cuối cùng và sau đó tìm paren phù hợp cho cái kia sẽ luôn hoạt động. (Nó hoạt động với đầu vào []quá.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.