बदलना ब्रेनफैक को मारियोलैंग


28

मारियोलैंग एक दो आयामी प्रोग्रामिंग भाषा है जहां स्रोत कोड एक सुपर मारियो ब्रदर्स स्तर जैसा दिखता है। इसके अलावा, इसका निर्देश सेट ब्रेनफक के समान है । इसका मतलब यह है कि मारियोलैंग अनिवार्य रूप से 2-डी ब्रेनफक है जहां अनुदेश सूचक मारियो की तरह चलता है। इसलिए जब मैंने प्रोग्रामिंग भाषा क्विज़ के लिए अपना मारियोलैंग सबमिशन लिखा , तो मैंने एक ब्रेनफ़क "हैलो, वर्ल्ड!" मारियोलैंग का कार्यक्रम। मैंने देखा कि यह एक बहुत ही व्यवस्थित प्रक्रिया के साथ संभव है, इसलिए आइए एक ब्रेनफक-टू-मारियोलैंग कंपाइलर लिखें!

नोट: मारियोलैंग कल्पना पूरी तरह से अस्पष्ट नहीं है, इसलिए मैं रूबी कार्यान्वयन की व्याख्या मान रहा हूं ।

मैं निम्नलिखित Brainfuck कार्यक्रम के साथ प्रक्रिया की व्याख्या करूँगा:

++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>.

यह प्रिंट Hello!और एक अनुगामी न्यूलाइन है।

  1. क्रमशः कन्वर्ट <और >टू , (और ):

    ++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.).
    
  2. मारियो पर चलने के लिए एक मंजिल जोड़ें:

    ++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.).
    ========================================================================
    
  3. अब मुद्दा यह है कि मारियोलैंग के पास लूप्स जैसे [और नहीं हैं ]। इसके बजाय, हमें मारियो को वास्तव में लूप में चलने के लिए लिफ्ट और दिशात्मक निर्देशों का उपयोग करना होगा। सबसे पहले, हम बदलने के [साथ >और फर्श को बदलने "। और हम भी की जगह ]के साथ [!और फर्श को बदलने =#:

    ++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.).
    =="======"===============================#===#============================
    
  4. ( "और अंत #से शुरू #होने वाले ") लिफ्ट का निर्माण कर सकते हैं, इसलिए अब हमें मारियो पर वापस चलने के लिए सहायक फर्श की आवश्यकता है। के साथ शुरू !और अंत <:

    ++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.).
    =="======"===============================#===#============================
             !                               <    
             #==============================="    
      !                                          <
      #=========================================="
    

    ध्यान दें कि सभी लाइनें कम से कम तब तक होनी चाहिए जब तक कि सबसे बड़ा एनक्लोजिंग लूप न हो, क्योंकि दुभाषिया छोटी रेखाओं में लिफ्ट के सिरों को जोड़ने में सक्षम नहीं है। इसलिए, हम रिक्त स्थान के साथ मध्य रेखाओं को पैड करते हैं।

और बस। हमें एक पूरी तरह कार्यात्मक, समकक्ष मारियोलैंग कार्यक्रम मिला है।

चुनौती

एक मान्य ब्रेनफैक कार्यक्रम को देखते हुए, इसे मारियोलैंग कार्यक्रम में संकलित करने के लिए उपरोक्त प्रक्रिया को लागू करें।

आप मान सकते हैं कि इनपुट में केवल कमांड कैरेक्टर हैं, अर्थात कोई भी वर्ण नहीं है ,.+-<>[]

सभी सहायक मंजिल मुख्य कार्यक्रम मंजिल के लिए जितना संभव हो उतना करीब होना चाहिए। आप मध्यवर्ती मंजिलों की पंक्तियों को या तो जितना संभव हो उतना कम करने के लिए चुन सकते हैं (सबसे बड़े एन्कोडिंग लूप की चौड़ाई तक) या मुख्य कार्यक्रम के अंत तक।

आप STDIN (या निकटतम विकल्प), कमांड-लाइन तर्क या फ़ंक्शन तर्क के माध्यम से इनपुट ले रहे हैं और STDOUT (या निकटतम विकल्प), फ़ंक्शन रिटर्न मान या फ़ंक्शन (आउट) पैरामीटर के माध्यम से परिणाम लिख सकते हैं। यदि आप परिणाम को STDOUT में नहीं छापते हैं, तो यह अभी भी एक नई पंक्ति-अलग स्ट्रिंग होनी चाहिए।

यह कोड गोल्फ है, इसलिए सबसे छोटा उत्तर (बाइट्स में) जीतता है।

परीक्षण के मामलों

परीक्षण मामलों को निम्नानुसार स्वरूपित किया जाता है: पहली पंक्ति ब्रेनफक प्रोग्राम (आपका इनपुट) है, फिर एक खाली लाइन है, और अगली खाली लाइन तक सब कुछ मारियोलैंग में अपेक्षित आउटपुट है। ये उदाहरण गद्देदार स्थानों की न्यूनतम मात्रा का उपयोग करते हैं। वैकल्पिक रूप से, आप प्रत्येक पंक्ति को आउटपुट की पहली पंक्ति की चौड़ाई के लिए रिक्त स्थान के साथ पैड कर सकते हैं।

>,++-.<

),++-.(
=======

,[.,]

,>.,[!
="===#
 !   <
 #==="

>>[-]<<[->>+<<]

))>-[!((>-))+(([!
=="==#=="=======#
  !  <  !       <
  #=="  #======="

++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>.

++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.).
=="======"===============================#===#============================
         !                               <    
         #==============================="    
  !                                          <
  #=========================================="

[][[[][[]]][]][[]]

>[!>>>[!>>[![![!>[![!>>[![!
"=#"""=#""=#=#=#"=#=#""=#=#
! <  ! < ! <    ! <   ! <  
#="  #=" #="    #="   #="  
        !    <       !    <
        #===="       #===="
    !          <     
    #=========="     
   !                <
   #================"


>>+++++++>>++>>++++>>+++++++>>+>>++++>>+>>+++>>+>>+++++>>+>>++>>+>>++++++>>++>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+++++++>>+>>+++++>>++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+++++++++++++++++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+>>+++++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>++>>++++>>+++++++>>+>>+++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++>>+>>++++>>+>>+>>++>>+++++>>+>>+++>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++++++++++++++>>++>>++>>+++>>++>>+>>++>>++++>>+++++++>>++>>+++++>>++++++++++>>+>>++>>++++>>+>>++>>+>>++++++>>++++++>>+>>+>>+++++>>+>>++++++>>++>>+++++>>+++++++>>++>>++++>>+>>++++++[<<]>>[>++++++[-<<++++++++++>>]<<++..------------------->[-<.>>+<]>[-<+>]>]<<[-[-[-[-[-[-[>++>]<+++++++++++++++++++++++++++++>]<++>]<++++++++++++++>]<+>]<++>]<<[->.<]<<]

))+++++++))++))++++))+++++++))+))++++))+))+++))+))+++++))+))++))+))++++++))++))++++))+++++++))+))+++++))++))+))+))++++))+++++++))+))+++++))+))+))+))++++))+++++++))+))+++++))++++++++++++++))+))+))++++))+++++++))+))+++++))++))+))+))++++))+++++++))+))+++++))+++++++++++++++++++++++++++++))+))+))++++))+++++++))+))+++++))++))+))+))+++++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))+))++))+))++++++))++))++++))+++++++))+))+++++))+++++++))+))+++++))+))+))+))++++))+))++))+))++++++))+))+++++))+++++++))+))++++))+))+))++))+++++))+))+++))+))++++))+))++))+))++++++))+))+++++))+++++++++++++++++++))++))++))+++))++))+))++))++++))+++++++))++))+++++))++++++++++))+))++))++++))+))++))+))++++++))++++++))+))+))+++++))+))++++++))++))+++++))+++++++))++))++++))+))++++++>(([!))>)++++++>-((++++++++++))[!((++..-------------------)>-(.))+([!)>-(+)[!)[!((>->->->->->->)++)[!(+++++++++++++++++++++++++++++)[!(++)[!(++++++++++++++)[!(+)[!(++)[!((>-).([!(([!
========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================="===#=="======="================#=========================="========#="=====#==#=="="="="="="="=====#================================#=====#=================#====#=====#=="=====#===#
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         !   <          !                <                          !        < !     <                 !     <                                                                      !     <    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         #==="          #================"                          #========" #====="                 #====="                                                                      #====="    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                !                                                                       <            !                                        <                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #======================================================================="            #========================================"                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   !                                                <                                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   #================================================"                                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 !                                                                    <                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 #===================================================================="                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               !                                                                           <                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               #==========================================================================="                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             !                                                                                   <             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             #==================================================================================="             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           !                                                                                                  <
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           #=================================================================================================="

जवाबों:


5

CJam, 148 144 बाइट्स

q"<>[""()>"er']/"[!"*_">!"1$|"\"#=":Cer:FF,[{SF,*L{'=t}/FI>(C#"['=-{_'##}{_CW</s}w],2*(:M'#tM('!tLM+ ;LW=34ctLW=('<tLW< ;L"S/=~:L;}fI]z~]{S-},N*

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।


1

अजगर, 707 चरस

def b(c):
 c,l,o,x,j,m=list(c.replace(">",")").replace("<","(")),[list("="*len(c))],[],[],0,0
 for i,z in enumerate(c):
  i+=j
  if"["==z:
   c[i],l[0][i]=">",'"'
   x.append(i)
  if"]"==z:
   c[i],l[0][i]="[!","=#"
   c,l[0],m,d,b=list("".join(c)),list("".join(l[0])),max(m,len(x)),0,x.pop()
   for a in o:d+=b<a[0]and-~i>a[0]or b<a[1]and-~i>a[1]
   o.append((b,i+1,d))
   j+=1
 for q in o:
  d=q[2]*2+1
  while len(l)<=d+1:l.append(list(" "*len(c)))
  l[d][q[0]],l[d+1][q[0]],l[d][q[1]],l[d+1][q[1]]="!","#","<",'"'
  for i in range(q[0]+1,q[1]):l[d+1][i]="="
 g="\n".join(l.rstrip()for l in("".join(c)+"\n"+"\n".join("".join(f)for f in l)).split("\n"))
 while"\n\n"in g:g=g.replace("\n\n","\n")
 return g

गोल्फ होने के लिए शायद बहुत सी जगह है। अंतिम परीक्षण मामले के लिए काम नहीं करता है।

उदाहरण का उपयोग:

>>> print b("++[>+++<-]>[<+++>-]<.")
=="=======#="=======#==
  !       < !       <
  #=======" #======="

आउटपुट में कोई रेखाएँ अनुगामी रिक्त स्थान नहीं रखती हैं।


6
यदि यह काम नहीं करता है, तो यह एक समाधान (imo) नहीं है।
मय्न्क्सोमाτ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.