พื้นหลัง
(ขึ้นอยู่กับเรื่องจริงที่ทำให้หัวใจวาย)
ในเวลาของฉันฉันได้เล่นกับ Lisp และภาษาที่คล้ายกันบ่อยครั้ง ฉันเขียนกับพวกเขาแล้ววิ่งตีความตีความออกแบบและสร้างเครื่องเขียนกับพวกเขาสำหรับฉัน ... และถ้ามีสิ่งหนึ่งที่รบกวนจิตใจฉันก็เห็น Lisp ที่ไม่สอดคล้องกับสไตล์การจัดรูปแบบเฉพาะของฉัน
น่าเสียดายที่มีเครื่องมือแก้ไขข้อความ ( ไอ XCode ไอ ) มีแนวโน้มที่จะดึงแท็บและช่องว่างที่สวยงามของฉันเมื่อใดก็ตามที่มีการคัดลอกและวางรหัส ... ใช้ไวยากรณ์ที่คล้ายกับเสียงกระเพื่อมนี้
(A
(B
(C)
(D))
(E))
( ABCDE
ฟังก์ชั่นโดยพลการอยู่ที่ไหน)
บรรณาธิการข้อความบางคนฆ่ารหัสที่น่ารักนี้ไปยังจุดสิ้นสุดต่อไปนี้:
(A
(B
(C)
(D))
(E))
ช่างเป็นระเบียบ! ไม่สามารถอ่านได้!
ช่วยฉันออก
ความท้าทาย
เป้าหมายของคุณในความท้าทายนี้คือการใช้ชุดฟังก์ชั่นคั่นด้วยบรรทัดใหม่ในรูปแบบที่อธิบายด้านล่างและกลับมาจัดเรียงที่สวยงามยิ่งขึ้นซึ่งเน้นการอ่านและความสง่างาม
การป้อนข้อมูล
เรากำหนดฟังก์ชันF
ของN
อาร์กิวเมนต์arity เป็นโครงสร้างคล้ายกับต่อไปนี้:
(F (G1 ...) (G2 ...) (G3 ...) ... (GN ...))
G1, G2, ..., GN
ฟังก์ชั่นทั้งหมดอยู่ที่ไหนและด้วยตนเอง 0
ฟังก์ชันarity A
นั้นเรียบง่าย(A)
ในขณะที่2
ฟังก์ชันarity B
เป็นแบบฟอร์ม(B (...) (...))
รหัสของคุณควรรับข้อมูลเป็นชุดของฟังก์ชั่นด้วยการขึ้นบรรทัดใหม่เพียงครั้งเดียวก่อนหน้าวงเล็บทุกอันของฟังก์ชั่น (ยกเว้นฟังก์ชั่นแรก) ตัวอย่างข้างต้นเป็นอินพุตที่ถูกต้อง
คุณอาจจะ:
- วงเล็บมีความสมดุล
- ฟังก์ชั่นจะไม่ต้องถูกเยื้องมากกว่า 250 ครั้ง
- ฟังก์ชัน EVERY ถูกล้อมรอบด้วยวงเล็บ:
()
- ชื่อของฟังก์ชันจะมีอักขระ ASCII ที่พิมพ์ได้เท่านั้น
- ชื่อของฟังก์ชั่นจะไม่มีวงเล็บหรือช่องว่าง
- มีบรรทัดใหม่ต่อท้ายที่เป็นตัวเลือกในอินพุต
ผลลัพธ์
รหัสของคุณควรส่งออกชุดฟังก์ชั่นเดียวกันโดยที่การเปลี่ยนแปลงเพียงอย่างเดียวคือการเพิ่มช่องว่างหรือแท็บก่อนหน้าเครื่องหมายวงเล็บหน้าของฟังก์ชั่น ผลลัพธ์ควรเป็นไปตามกฎต่อไปนี้:
- ฟังก์ชั่นแรก (และฟังก์ชั่นระดับบนสุด) ที่กำหนดควรไม่มีช่องว่างก่อนหน้า
- อาร์กิวเมนต์ไปยังตำแหน่งแนวนอนของฟังก์ชันนั้นเป็นหนึ่งแท็บทางด้านขวาของตำแหน่งแนวนอนของฟังก์ชันนั้น
- แท็บถูกกำหนดให้นำไปใช้ แต่ต้องมีช่องว่างอย่างน้อย 3 ช่อง
- คุณอาจเลือกพิมพ์ได้สูงสุดสองช่องว่างหลังจากแต่ละบรรทัด
กฎระเบียบ
- นี่คือ code-golf: รหัสที่สั้นที่สุดชนะ!
- ช่องโหว่มาตรฐานไม่ได้รับอนุญาต
ตัวอย่าง
การป้อนข้อมูล:
(A
(B
(C)
(D))
(E))
เอาท์พุท:
(A
(B
(C)
(D))
(E))
การป้อนข้อมูล:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
เอาท์พุท:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
การป้อนข้อมูล:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
เอาท์พุท:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
()
?