แปลง JSF ** k เป็น JS ปกติ


12

พวกคุณหลายคนรู้จักJSF ** kแล้ว สำหรับผู้ที่ไม่ได้มันเป็นสคริปต์ที่พื้นเปลี่ยนรหัสใด ๆ JavaScript []()!+เป็นสิ่งที่เขียนโดยใช้เพียง

งานของคุณคือการสร้างโดยใช้ภาษาใดก็ได้ที่คุณต้องการโปรแกรมที่แปลง JSF ** k เป็น JavaScript ที่ไม่ทำให้ยุ่งเหยิง

  • อินพุต : สตริงที่มี JSF ** k ที่ถูกต้อง
  • เอาต์พุต : สตริงที่มีโค้ด JavaScript ปกติที่ก่อนหน้านี้ JSF ** ked เพื่อสร้างอินพุต

สำหรับความท้าทายนี้ให้พิจารณาว่าสตริงอินพุตมีเพียง JSF ** ked เพียงครั้งเดียว

นี่คือการประกวดดังนั้นรหัสที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ


@Michael แต่การเข้ารหัสกลับกันอย่างไม่น่าสงสัย? ฉันไม่คิดอย่างนั้น ... ฉันจะตัดสินใจได้อย่างไรว่าการ[...]เข้าถึงอาเรย์บางส่วนเป็นส่วนหนึ่งของรหัสต้นฉบับหรือส่วนหนึ่งของการทำให้งงงวย? เหมือนกันสำหรับโครงสร้างอื่น ๆ ทั้งหมดจริงๆ
Martin Ender

2
@JanDvorak โอ้อะไรนะ ... มันช่างมีประสิทธิผลมาก ... เราสามารถช่วยเขาปิดคำถามนี้และ upvoting แทน downvoting
Martin Ender

2
@ m.buettner ฉันลงคะแนนเพราะฉันไม่รู้สึกว่าคำถามจะเกิดขึ้นที่ใดก็ได้ แน่นอนว่าฉันไม่ต้องการอัปโหลดโพสต์เพื่อปลดล็อคสิทธิ์บางอย่างสำหรับใครบางคน
John Dvorak

2
@JanDvorak ฉันคิดว่าเราไม่ควรกีดกันผู้ใช้ใหม่ที่ต้องการเขียนความท้าทายที่ดีและฟังคำวิจารณ์ เนื่องจาก sandbox อยู่ใน meta และจะอยู่ที่นั่น downvoting นั้นค่อนข้างมีประสิทธิภาพ การปิดบัญชีนั้นเพียงพอแล้ว ฉันไม่คิดว่า upvote เดียวจะเป็นอันตรายต่อทุกคนและจะให้โอกาสผู้ใช้ในการค้นหารายการในชุมชนนี้จริง ๆ แต่มีคนเห็นด้วยกับคุณและตัดสินใจลงคะแนนเช่นกันเพราะห่าทำไมผู้ใช้ใหม่ควรได้รับอนุญาตให้โพสต์ในแซนด์บ็อกซ์ (ฉันเดา) ... และตอนนี้เขายังไม่สามารถโพสต์ที่นั่นได้ ฉันไม่คิดว่าเป็นวิธีที่เราเติบโตชุมชนนี้
Martin Ender

1
คุณช่วยกรุณาเพิ่มคำอธิบายความหมายของJavaScript ปกติได้ไหม? อาจไม่ชัดเจนว่าจะต้องทำการเปลี่ยนแปลงด้านหลังอย่างไร เช่นถ้าฉันวนซ้ำ obfustator สองครั้งในอินพุตที่ดีบางอย่างผลลัพธ์ที่แนะนำคืออะไร? โปรแกรมต้นฉบับหรืออินพุตซึ่ง obfuscated แล้ว?
Howard

คำตอบ:


12

Javascript - 68 55 51

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

อีกทางหนึ่ง: (ความยาวเดียวกัน)

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

ทำงานในคอนโซลของเบราว์เซอร์ของคุณ รับประกันว่าจะทำงานกับรหัสที่สร้างโดย jsfuck.com ด้วยตัวเลือก 'Eval Source' เท่านั้น

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
)

ในการแก้ไขที่แนะนำที่ฉันปฏิเสธ @ user3082537 แนะนำให้ใช้ regex แทน slice ดังเช่นใน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 parens ล่าสุดแล้วจึงค้นหาการจับคู่ paren ที่ตรงกันสำหรับอีกตัวหนึ่งจะทำงานได้เสมอ (ทำงานได้กับอินพุตด้วย[]เช่นกัน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.