ব্রেনফাককে মারিওল্যাং-তে রূপান্তর করুন


28

মারিওল্যাং একটি দ্বি-মাত্রিক প্রোগ্রামিং ভাষা যেখানে উত্স কোডটি একটি সুপার মারিও ব্রোস লেভেলের অনুরূপ। তদ্ব্যতীত, এটির নির্দেশিকা সেট ব্রেইনফাকের মতো । এর অর্থ হ'ল মারিওল্যাং মূলত একটি 2-ডি ব্রেইনফাক যেখানে নির্দেশিকা পয়েন্টার মারিওয়ের মতো চলে moves সুতরাং যখন আমি প্রোগ্রামিং ল্যাঙ্গুয়েজ কুইজের জন্য আমার মারিওল্যাং জমা লিখলাম, তখন আমি একটি ব্রেইনফাককে "হ্যালো, ওয়ার্ল্ড!" মারিওল্যাং প্রোগ্রাম। আমি লক্ষ্য করেছি যে এটি খুব পদ্ধতিগত প্রক্রিয়া সহ সম্ভব, সুতরাং আসুন একটি ব্রেইনফাক-টু-মারিওল্যাং সংকলক লিখি!

দ্রষ্টব্য: মারিওল্যাং স্পেক সম্পূর্ণরূপে দ্ব্যর্থহীন নয়, তাই আমি রুবি বাস্তবায়নের ব্যাখ্যাটি ধরে নিচ্ছি ।

আমি নিম্নলিখিত ব্রেনফাক প্রোগ্রামটি দিয়ে প্রক্রিয়াটি ব্যাখ্যা করব:

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

এটি প্রিন্ট করে Hello!এবং একটি ট্রেলিং নিউলাইন।

  1. রূপান্তর <এবং >করতে (এবং )যথাক্রমে:

    ++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.).
    
  2. মারিও চলার জন্য একটি তল যুক্ত করুন:

    ++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.).
    ========================================================================
    
  3. এখন বিষয়টি হ'ল মারিওল্যাং-এর মতো লুপ নেই [এবং ]। পরিবর্তে, মারিওকে আসলে একটি লুপে হাঁটাতে আমাদের লিফট এবং নির্দেশিক নির্দেশাবলী ব্যবহার করতে হবে। প্রথমত, আমরা প্রতিস্থাপন [সঙ্গে >এবং মেঝে পরিবর্তন "। এবং আমরা এর ]সাথে [!মেঝেতে প্রতিস্থাপন এবং পরিবর্তন করি =#:

    ++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.).
    =="======"===============================#===#============================
    
  4. "এবং #লিফট গঠন করতে পারেন (থেকে শুরু #, এ বিভক্তি "), তাই এখন আমরা সকলে মারিও ফিরে হেঁটে যাওয়ার জন্য অক্জিলিয়ারী মেঝে হয় প্রয়োজন। শুরু !এবং এর সাথে শেষ <:

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

    মনে রাখবেন যে সমস্ত লাইন কমপক্ষে বৃহত্তম এনক্লোজিং লুপ হিসাবে দীর্ঘ হওয়া উচিত, কারণ দোভাষী সংক্ষিপ্ত রেখাগুলি জুড়ে লিফট প্রান্তকে সংযোগ করতে সক্ষম হন না। অতএব, আমরা ফাঁকা স্থানগুলির সাথে মধ্য রেখাগুলি প্যাড করি।

এবং এটাই. আমরা একটি সম্পূর্ণ কার্যকরী, সমমানের মারিওল্যাং প্রোগ্রাম পেয়েছি।

চ্যালেঞ্জ

একটি বৈধ ব্রেইনফাক প্রোগ্রাম দেওয়া হয়েছে, এটি একটি মারিওল্যাং প্রোগ্রামে সংকলনের জন্য উপরের পদ্ধতিটি প্রয়োগ করুন।

আপনি ধরে নিতে পারেন ইনপুটটিতে কেবলমাত্র কমান্ড অক্ষর রয়েছে, অর্থাত্ কোনও অক্ষর ব্যতীত ,.+-<>[]

সমস্ত সহায়ক তল মূল প্রোগ্রাম ফ্লোরের যতটা সম্ভব কাছাকাছি থাকতে হবে। আপনি মাঝারি মেঝেগুলির লাইনগুলি যতটা সম্ভব সামান্য (বৃহত্তম সংলগ্ন লুপের প্রস্থ পর্যন্ত) বা মূল প্রোগ্রামের শেষ পর্যন্ত প্যাড করতে বেছে নিতে পারেন।

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন। আপনি যদি ফলাফলটি STDOUT এ মুদ্রণ না করেন তবে এটি এখনও একটি একক নিউলাইন-পৃথক স্ট্রিং হওয়া উচিত।

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।

পরীক্ষার মামলা

পরীক্ষার কেসগুলি নিম্নরূপে ফর্ম্যাট করা হয়: প্রথম লাইনটি ব্রেইনফাক প্রোগ্রাম (আপনার ইনপুট), তারপরে একটি খালি লাইন রয়েছে এবং পরবর্তী ফাঁকা লাইন পর্যন্ত সবকিছুই মারিওল্যাং-তে প্রত্যাশিত আউটপুট। এই উদাহরণগুলি প্যাডেড স্পেসগুলির সর্বনিম্ন পরিমাণ ব্যবহার করে। বিকল্পভাবে, আপনি আউটপুট প্রথম লাইন প্রস্থে ফাঁকা প্রতিটি লাইন প্যাড করতে পারেন।

>,++-.<

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

,[.,]

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

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

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

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

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

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

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


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

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

উত্তর:



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
যদি এটি কাজ না করে তবে এটি কোনও সমাধান নয় (ইমো)।
mınxomaτ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.