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 ตัวอย่างเหล่านี้ใช้พื้นที่ที่มีเบาะรองน้อยที่สุด หรือคุณอาจรองแต่ละบรรทัดด้วยช่องว่างตามความกว้างของบรรทัดแรกของผลลัพธ์
>,++-.<
),++-.(
=======
,[.,]
,>.,[!
="===#
! <
#==="
>>[-]<<[->>+<<]
))>-[!((>-))+(([!
=="==#=="=======#
! < ! <
#==" #======="
++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>.
++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.).
=="======"===============================#===#============================
! <
#==============================="
! <
#=========================================="
[][[[][[]]][]][[]]
>[!>>>[!>>[![![!>[![!>>[![!
"=#"""=#""=#=#=#"=#=#""=#=#
! < ! < ! < ! < ! <
#=" #=" #=" #=" #="
! < ! <
#====" #===="
! <
#=========="
! <
#================"
>>+++++++>>++>>++++>>+++++++>>+>>++++>>+>>+++>>+>>+++++>>+>>++>>+>>++++++>>++>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+++++++>>+>>+++++>>++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+++++++++++++++++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+>>+++++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>++>>++++>>+++++++>>+>>+++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++>>+>>++++>>+>>+>>++>>+++++>>+>>+++>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++++++++++++++>>++>>++>>+++>>++>>+>>++>>++++>>+++++++>>++>>+++++>>++++++++++>>+>>++>>++++>>+>>++>>+>>++++++>>++++++>>+>>+>>+++++>>+>>++++++>>++>>+++++>>+++++++>>++>>++++>>+>>++++++[<<]>>[>++++++[-<<++++++++++>>]<<++..------------------->[-<.>>+<]>[-<+>]>]<<[-[-[-[-[-[-[>++>]<+++++++++++++++++++++++++++++>]<++>]<++++++++++++++>]<+>]<++>]<<[->.<]<<]
))+++++++))++))++++))+++++++))+))++++))+))+++))+))+++++))+))++))+))++++++))++))++++))+++++++))+))+++++))++))+))+))++++))+++++++))+))+++++))+))+))+))++++))+++++++))+))+++++))++++++++++++++))+))+))++++))+++++++))+))+++++))++))+))+))++++))+++++++))+))+++++))+++++++++++++++++++++++++++++))+))+))++++))+++++++))+))+++++))++))+))+))+++++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))++))++++))+++++++))+))+++++))+++++++))+))+++++))+))+))+))++++))+))++))+))++++++))+))+++++))+++++++))+))++++))+))+))++))+++++))+))+++))+))++++))+))++))+))++++++))+))+++++))+++++++++++++++++++))++))++))+++))++))+))++))++++))+++++++))++))+++++))++++++++++))+))++))++++))+))++))+))++++++))++++++))+))+))+++++))+))++++++))++))+++++))+++++++))++))++++))+))++++++>(([!))>)++++++>-((++++++++++))[!((++..-------------------)>-(.))+([!)>-(+)[!)[!((>->->->->->->)++)[!(+++++++++++++++++++++++++++++)[!(++)[!(++++++++++++++)[!(+)[!(++)[!((>-).([!(([!
========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================="===#=="======="================#=========================="========#="=====#==#=="="="="="="="=====#================================#=====#=================#====#=====#=="=====#===#
! < ! < ! < ! < ! < ! <
#===" #================" #========" #=====" #=====" #====="
! < ! <
#=======================================================================" #========================================"
! <
#================================================"
! <
#===================================================================="
! <
#==========================================================================="
! <
#==================================================================================="
! <
#=================================================================================================="