MarioLANG 은 소스 코드가 Super Mario Bros. 수준과 유사한 2 차원 프로그래밍 언어입니다. 게다가, 그것의 명령어 세트는 Brainfuck 와 매우 유사합니다 . 이것은 MarioLANG이 본질적으로 명령 포인터가 Mario처럼 움직이는 2D Brainfuck임을 의미합니다. 그래서 내 MarioLANG 제출을 쓸 때 프로그래밍 언어 퀴즈를 들면, 나는 브레인 퍽 변환에 의해 시작 "안녕하세요, 세계!" MarioLANG에 프로그램. 나는 이것이 매우 체계적인 프로세스로 가능하다는 것을 알았으므로 Brainfuck-to-MarioLANG 컴파일러를 작성하십시오!
참고 : MarioLANG 사양은 완전히 모호하지 않으므로 Ruby 구현 의 해석을 가정합니다 .
다음 Brainfuck 프로그램으로 프로세스를 설명하겠습니다.
++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>.
인쇄 Hello!
및 후행 줄 바꿈.
변환
<
및>
에(
와)
각각 :++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.).
마리오가 걷는 바닥을 추가하십시오 :
++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.). ========================================================================
이제 문제는 MarioLANG에
[
and와 같은 루프가 없다는 것]
입니다. 대신 마리오가 실제로 루프를 걷도록 엘리베이터와 방향 지시를 사용해야합니다. 첫째, 우리는 교체[
로>
하고 바닥을 변경"
. 그리고 우리는 또한 대체]
와 함께[!
바닥에 변경=#
:++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.). =="======"===============================#===#============================
"
와#
엘리베이터를 형성 (부터 수#
에서 끝나는,"
그래서 지금 우리 모두는 마리오가 다시 걸을위한 보조 바닥입니다 필요). 시작!
과 끝<
:++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.). =="======"===============================#===#============================ ! < #===============================" ! < #=========================================="
통역사가 짧은 선을 통해 엘리베이터 끝을 연결할 수 없기 때문에 모든 선은 가장 큰 인클로저 루프만큼 길어야합니다. 따라서 중간 줄을 공백으로 채 웁니다.
그리고 그게 다야. 우리는 완전히 기능적이고 동등한 MarioLANG 프로그램을 가지고 있습니다.
도전
유효한 Brainfuck 프로그램이 제공되면 위의 절차를 구현하여 MarioLANG 프로그램으로 컴파일하십시오.
입력에 명령 문자 만 있다고 가정 할 수 있습니다 (즉,를 제외한 문자 없음) ,.+-<>[]
.
모든 보조 층은 주 프로그램 층과 가능한 한 가까이 있어야합니다. 중간 층의 선을 최대한 작게 (가장 큰 둘러싸는 루프의 너비까지) 또는 주 프로그램의 끝까지 채우도록 선택할 수 있습니다.
STDIN (또는 가장 가까운 대안), 명령 행 인수 또는 함수 인수를 통해 입력을 받고 STDOUT (또는 가장 가까운 대안), 함수 리턴 값 또는 함수 (out) 매개 변수를 통해 결과를 출력하는 프로그램 또는 함수를 작성할 수 있습니다. 결과를 STDOUT으로 인쇄하지 않으면 여전히 줄 바꿈으로 구분 된 단일 문자열이어야합니다.
이것은 코드 골프이므로 가장 짧은 대답 (바이트)이 이깁니다.
테스트 사례
테스트 사례는 다음과 같이 형식이 지정됩니다. 첫 번째 줄은 Brainfuck 프로그램 (입력)이고 빈 줄이 있으며 다음 빈 줄까지 모든 것이 MarioLANG의 예상 출력입니다. 이 예에서는 최소의 패딩 공간을 사용합니다. 또는 각 줄을 출력의 첫 줄 너비에 공백으로 채울 수 있습니다.
>,++-.<
),++-.(
=======
,[.,]
,>.,[!
="===#
! <
#==="
>>[-]<<[->>+<<]
))>-[!((>-))+(([!
=="==#=="=======#
! < ! <
#==" #======="
++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>.
++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.).
=="======"===============================#===#============================
! <
#==============================="
! <
#=========================================="
[][[[][[]]][]][[]]
>[!>>>[!>>[![![!>[![!>>[![!
"=#"""=#""=#=#=#"=#=#""=#=#
! < ! < ! < ! < ! <
#=" #=" #=" #=" #="
! < ! <
#====" #===="
! <
#=========="
! <
#================"
>>+++++++>>++>>++++>>+++++++>>+>>++++>>+>>+++>>+>>+++++>>+>>++>>+>>++++++>>++>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+++++++>>+>>+++++>>++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+++++++++++++++++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+>>+++++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>++>>++++>>+++++++>>+>>+++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++>>+>>++++>>+>>+>>++>>+++++>>+>>+++>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++++++++++++++>>++>>++>>+++>>++>>+>>++>>++++>>+++++++>>++>>+++++>>++++++++++>>+>>++>>++++>>+>>++>>+>>++++++>>++++++>>+>>+>>+++++>>+>>++++++>>++>>+++++>>+++++++>>++>>++++>>+>>++++++[<<]>>[>++++++[-<<++++++++++>>]<<++..------------------->[-<.>>+<]>[-<+>]>]<<[-[-[-[-[-[-[>++>]<+++++++++++++++++++++++++++++>]<++>]<++++++++++++++>]<+>]<++>]<<[->.<]<<]
))+++++++))++))++++))+++++++))+))++++))+))+++))+))+++++))+))++))+))++++++))++))++++))+++++++))+))+++++))++))+))+))++++))+++++++))+))+++++))+))+))+))++++))+++++++))+))+++++))++++++++++++++))+))+))++++))+++++++))+))+++++))++))+))+))++++))+++++++))+))+++++))+++++++++++++++++++++++++++++))+))+))++++))+++++++))+))+++++))++))+))+))+++++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))++))++++))+++++++))+))+++++))+++++++))+))+++++))+))+))+))++++))+))++))+))++++++))+))+++++))+++++++))+))++++))+))+))++))+++++))+))+++))+))++++))+))++))+))++++++))+))+++++))+++++++++++++++++++))++))++))+++))++))+))++))++++))+++++++))++))+++++))++++++++++))+))++))++++))+))++))+))++++++))++++++))+))+))+++++))+))++++++))++))+++++))+++++++))++))++++))+))++++++>(([!))>)++++++>-((++++++++++))[!((++..-------------------)>-(.))+([!)>-(+)[!)[!((>->->->->->->)++)[!(+++++++++++++++++++++++++++++)[!(++)[!(++++++++++++++)[!(+)[!(++)[!((>-).([!(([!
========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================="===#=="======="================#=========================="========#="=====#==#=="="="="="="="=====#================================#=====#=================#====#=====#=="=====#===#
! < ! < ! < ! < ! < ! <
#===" #================" #========" #=====" #=====" #====="
! < ! <
#=======================================================================" #========================================"
! <
#================================================"
! <
#===================================================================="
! <
#==========================================================================="
! <
#==================================================================================="
! <
#=================================================================================================="