MarioLANGเป็นภาษาโปรแกรมสองมิติที่ซอร์สโค้ดคล้ายกับระดับ Super Mario Bros. นอกจากนี้ชุดคำสั่งของมันจะคล้ายกับbrainfuck 's ซึ่งหมายความว่า MarioLANG นั้นเป็นสมอง 2 มิติที่ตัวชี้คำสั่งเคลื่อนไหวเหมือนมาริโอ ดังนั้นเมื่อฉันเขียนการยื่น MarioLANGสำหรับแบบทดสอบภาษาโปรแกรมฉันเริ่มต้นด้วยการแปลง Brainfuck "Hello, World!" โปรแกรมเพื่อ MarioLANG ฉันสังเกตเห็นว่าสิ่งนี้เป็นไปได้ด้วยกระบวนการที่เป็นระบบดังนั้นลองเขียนคอมไพเลอร์ Brainfuck-to-MarioLANG กัน!
หมายเหตุ: MarioLANG สเปคไม่ได้เป็นที่ชัดเจนอย่างสิ้นเชิงดังนั้นฉันสมมติว่าการตีความของการดำเนินงานทับทิม
ฉันจะอธิบายกระบวนการด้วยโปรแกรม Brainfuck ต่อไปนี้:
++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>.
มันพิมพ์Hello!และขึ้นบรรทัดใหม่ต่อท้าย
แปลง
<และ>เป็น(และ)ตามลำดับ:++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.).เพิ่มพื้นสำหรับมาริโอเพื่อเดินบน:
++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.). ========================================================================ตอนนี้ปัญหาคือ MarioLANG ไม่ได้มีลูปเช่นและ
[]แต่เราต้องใช้ลิฟต์และคำแนะนำเพื่อให้มาริโอเดินวนเป็นวงกลม ครั้งแรกที่เราเข้ามาแทนที่[ด้วยและเปลี่ยนไปที่พื้น>"และเรายังแทนที่]ด้วย[!และเปลี่ยนพื้นเพื่อ=#:++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.). =="======"===============================#===#============================"และ#สามารถสร้างลิฟท์ (เริ่มต้นจาก#ตอนจบที่") ดังนั้นตอนนี้สิ่งที่เราต้องการจะเสริมชั้นสำหรับมาริโอที่จะเดินกลับมาที่ การเริ่มต้นด้วย!และสิ้นสุดด้วย<:++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.). =="======"===============================#===#============================ ! < #===============================" ! < #=========================================="โปรดทราบว่าทุกบรรทัดต้องมีอย่างน้อยที่สุดตราบวนลูปล้อมรอบที่ใหญ่ที่สุดเนื่องจากล่ามไม่สามารถเชื่อมต่อลิฟท์สิ้นสุดในบรรทัดที่สั้นกว่าได้ ดังนั้นเราจึงขีดเส้นกลางด้วยช่องว่าง
และนั่นคือมัน เรามีโปรแกรม MarioLANG ที่ทำงานได้อย่างสมบูรณ์และเทียบเท่า
ความท้าทาย
ให้โปรแกรม Brainfuck ที่ถูกต้องใช้ขั้นตอนข้างต้นเพื่อรวบรวมเป็นโปรแกรม MarioLANG
,.+-<>[]คุณอาจจะคิดว่ามีตัวอักษรคำสั่งเท่านั้นในการป้อนข้อมูลคือตัวละครที่ไม่มียกเว้น
ชั้นเสริมทั้งหมดจะต้องอยู่ใกล้ที่สุดเท่าที่จะเป็นไปได้ที่ชั้นโปรแกรมหลัก คุณอาจเลือกที่จะวางแนวของชั้นกลางให้น้อยที่สุดเท่าที่จะเป็นไปได้ (จนถึงความกว้างของวงรอบที่ใหญ่ที่สุด) หรือไปยังจุดสิ้นสุดของโปรแกรมหลัก
คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่น, รับอินพุตผ่าน STDIN (หรือทางเลือกที่ใกล้เคียงที่สุด), อาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ของฟังก์ชันและส่งผลลัพธ์ผ่าน STDOUT (หรือทางเลือกที่ใกล้เคียงที่สุด), ค่าส่งคืนของฟังก์ชันหรือพารามิเตอร์ หากคุณไม่พิมพ์ผลลัพธ์ไปที่ STDOUT ก็ควรจะเป็นสตริงที่คั่นด้วยบรรทัดใหม่
นี่คือรหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ
กรณีทดสอบ
กรณีทดสอบมีการจัดรูปแบบดังนี้: บรรทัดแรกคือโปรแกรม Brainfuck (อินพุตของคุณ) จากนั้นมีบรรทัดว่างและทุกอย่างจนกระทั่งบรรทัดว่างถัดไปเป็นผลลัพธ์ที่คาดหวังใน MarioLANG ตัวอย่างเหล่านี้ใช้พื้นที่ที่มีเบาะรองน้อยที่สุด หรือคุณอาจรองแต่ละบรรทัดด้วยช่องว่างตามความกว้างของบรรทัดแรกของผลลัพธ์
>,++-.<
),++-.(
=======
,[.,]
,>.,[!
="===#
! <
#==="
>>[-]<<[->>+<<]
))>-[!((>-))+(([!
=="==#=="=======#
! < ! <
#==" #======="
++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>.
++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.).
=="======"===============================#===#============================
! <
#==============================="
! <
#=========================================="
[][[[][[]]][]][[]]
>[!>>>[!>>[![![!>[![!>>[![!
"=#"""=#""=#=#=#"=#=#""=#=#
! < ! < ! < ! < ! <
#=" #=" #=" #=" #="
! < ! <
#====" #===="
! <
#=========="
! <
#================"
>>+++++++>>++>>++++>>+++++++>>+>>++++>>+>>+++>>+>>+++++>>+>>++>>+>>++++++>>++>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+++++++>>+>>+++++>>++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+++++++++++++++++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+>>+++++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>++>>++++>>+++++++>>+>>+++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++>>+>>++++>>+>>+>>++>>+++++>>+>>+++>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++++++++++++++>>++>>++>>+++>>++>>+>>++>>++++>>+++++++>>++>>+++++>>++++++++++>>+>>++>>++++>>+>>++>>+>>++++++>>++++++>>+>>+>>+++++>>+>>++++++>>++>>+++++>>+++++++>>++>>++++>>+>>++++++[<<]>>[>++++++[-<<++++++++++>>]<<++..------------------->[-<.>>+<]>[-<+>]>]<<[-[-[-[-[-[-[>++>]<+++++++++++++++++++++++++++++>]<++>]<++++++++++++++>]<+>]<++>]<<[->.<]<<]
))+++++++))++))++++))+++++++))+))++++))+))+++))+))+++++))+))++))+))++++++))++))++++))+++++++))+))+++++))++))+))+))++++))+++++++))+))+++++))+))+))+))++++))+++++++))+))+++++))++++++++++++++))+))+))++++))+++++++))+))+++++))++))+))+))++++))+++++++))+))+++++))+++++++++++++++++++++++++++++))+))+))++++))+++++++))+))+++++))++))+))+))+++++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))++))++++))+++++++))+))+++++))+++++++))+))+++++))+))+))+))++++))+))++))+))++++++))+))+++++))+++++++))+))++++))+))+))++))+++++))+))+++))+))++++))+))++))+))++++++))+))+++++))+++++++++++++++++++))++))++))+++))++))+))++))++++))+++++++))++))+++++))++++++++++))+))++))++++))+))++))+))++++++))++++++))+))+))+++++))+))++++++))++))+++++))+++++++))++))++++))+))++++++>(([!))>)++++++>-((++++++++++))[!((++..-------------------)>-(.))+([!)>-(+)[!)[!((>->->->->->->)++)[!(+++++++++++++++++++++++++++++)[!(++)[!(++++++++++++++)[!(+)[!(++)[!((>-).([!(([!
========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================="===#=="======="================#=========================="========#="=====#==#=="="="="="="="=====#================================#=====#=================#====#=====#=="=====#===#
! < ! < ! < ! < ! < ! <
#===" #================" #========" #=====" #=====" #====="
! < ! <
#=======================================================================" #========================================"
! <
#================================================"
! <
#===================================================================="
! <
#==========================================================================="
! <
#==================================================================================="
! <
#=================================================================================================="