mbomb007 ขอให้เราทำให้โปรแกรมการทำร้ายร่างกายตนเอง มันเป็นความท้าทายที่น่าสนใจ แต่โดยส่วนตัวแล้วฉันไม่ชอบที่จะสนับสนุนให้โปรแกรมของฉันกลายเป็นการทำร้ายตนเอง ฉันชอบคิดว่าหัวใจของทุกโปรแกรมคือผีเสื้อที่สวยงามรออยู่
เช่นนี้สำหรับการแข่งขันกอล์ฟ Code แรกของฉันฉันท้าทาย Stack Exchange เพื่อแปรสภาพผีเสื้อ โปรแกรมของคุณควรยอมรับรหัสของตัวเองเป็นอินพุทและเอาท์พุทI am a caterpillar!
ตามด้วยรหัสสำหรับโปรแกรมอื่นในภาษาเดียวกัน (คุณอาจใส่ตัวแบ่งระหว่างเอาท์พุทหรือไม่ ... แต่เรากำลังพูดถึงผีเสื้อ โปรแกรมที่สองนี้ควรส่งออกI am a beautiful butterfly!
การเปลี่ยนแปลง: โปรแกรมนี้ควรแก้ไขตัวเองซึ่งเป็นสาเหตุที่มันถูกส่งตัวเองเป็นอินพุต ฉันไม่ต้องการโปรแกรมซ้อนที่น่าเบื่อที่ไม่มีอะไรนอกจากคำสั่งพิมพ์I am a caterpillar!
ตามด้วยการพิมพ์ซอร์สโค้ด คุณต้องเปลี่ยนรหัสตัวเองดังนั้นคำตอบที่น่าเบื่อที่สุดที่ยอมรับได้คือคำตอบที่พิมพ์I am a caterpillar
แล้วฉีกสตริงออกจากอินพุต (ซึ่งเกิดขึ้นเป็นรหัส) และพิมพ์นั้น แน่นอนว่านี่เป็นข้อกำหนดเล็กน้อยในการเขียนดังนั้นควรคิดว่าเป็น "วิญญาณแห่งความท้าทาย" ข้อกำหนดอย่างเป็นทางการจะได้รับการตั้งค่าที่ "หากโปรแกรมของคุณได้รับสตริงสุ่มที่มีความยาวเท่ากับโปรแกรมของคุณควรมีโอกาสน้อยกว่า 5% ในการพิมพ์I am a butterfly
เมื่อรันโปรแกรมที่สอง"
สรุป:
- เขียนโปรแกรมซึ่งเมื่อให้รหัสของตัวเองเป็นอินพุทแล้วพิมพ์
I am a caterpillar!
ตามด้วยบล็อกของซอร์สโค้ด - บล็อกที่สองของซอร์สโค้ดเมื่อรวบรวม / ตีความเป็นภาษาเดียวกันพิมพ์
I am a beautiful butterfly!
- หากโปรแกรมของคุณไม่ได้รับรหัสที่มาของตัวเองเป็นอินพุตและจะได้รับสตริงอักขระแบบสุ่มที่ไม่ตรงกับรหัสของตัวเองผลลัพธ์จะต้องล้มเหลวในการรวบรวม / ตีความหรือไม่พิมพ์
I am a butterfly!
อย่างน้อย 95% ของการสุ่ม สตริง (วิญญาณ: คุณคาดว่าจะอ่านซอร์สโค้ดของคุณเองจากอินพุตและต่อเข้าด้วยกันเป็นผีเสื้อ)- ฉันสบายใจกับคุณที่ไม่ได้พิสูจน์สิ่งนี้ตราบใดที่คุณยังคงยึดมั่นในจิตวิญญาณของความคิดการเปลี่ยนแปลงการปรับเปลี่ยนรหัสของคุณเอง แต่ถ้าคุณกำลังพยายามเล่นเกมช่องโหว่เพื่อหลีกเลี่ยงการใช้อินพุตของคุณ เพื่อพิสูจน์มัน
- ช่องโหว่มาตรฐานใช้
ฉันต้องการให้สิ่งเหล่านี้ตัดสินโดยความสวยงามของพวกเขา แต่นั่นเป็นวิธีการที่ไม่ใช่เชิงปริมาณอย่างเด็ดขาดดังนั้นเส้นทาง "จำนวนไบต์" ปกติจึงสามารถใช้ตัดสินได้
โบนัส : -20% - เลือกสตริงตัวอักษร 3 ตัวที่ไม่ตรงกับตัวอักษร 3 ตัวแรกของโปรแกรม หากฉันรันโปรแกรม caterpillar แต่แก้ไขอินพุตเพื่อให้อักขระ 3 ตัวแรกถูกเปลี่ยนเป็นตัวที่ระบุให้พิมพ์I am Batman!
แทน เป็นแบทแมนเสมอ ( กฎสตริงแบบสุ่มที่เหมือนกันใช้สำหรับ ... การเปลี่ยนแปลง! )
ตัวอย่างเล็กน้อย (หลาม):
"""
print "I am a beautiful butterfly!"
#print "I am Batman!"
"""
import sys
code = sys.stdin.read()
if code.startswith("YYZ"):
# swap the comments between the print statements
code = code.replace("#print", "_a").replace("print", "#print").replace("_a", "print")
code = [3:] # remove """ or XYZ
code = code.split('"""')[0]
print "I am a caterpillar!"
print code