মারিও কি সঙ্কুচিত উপগ্রহে পড়বে? (ডায়াগ্রাম যুক্ত হয়েছে)


23

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

ছবি: মারিওউইকি.কম

ছবি: মারিওউইকি.কম

(আপনি গ্রহটিকে 2x2x2 কিউব হিসাবে ভাবতে পারেন যার মুখগুলি 2x3 "ব্রিজ" দ্বারা একে অপরের সাথে সংযুক্ত এবং সংযুক্ত করা হয়েছে))

দুর্ভাগ্যক্রমে, যেহেতু আমার নিয়ামকটি খুব ভেঙে গেছে, মারিও লাফ দিতে পারে না এবং চারটি মূল দিকের মধ্যে সীমাবদ্ধ। অতিরিক্তভাবে, মারিও খুব ধীরে ধীরে চলে আসে এবং তার পিছনে প্ল্যাটফর্মটি অদৃশ্য না হয়েও এক ধাপ পিছনে নিতে পারে না।

ধরা যাক ক্যামেরা সর্বদা মারিওর মাথার উপরে এবং তিনি 2x2 মুখের নীচে ডানদিকে শুরু করুন:

      ■ ■
      ■ ■
      ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ M ■ ■ ■
      ■ ■
      ■ ■
      ■ ■

আপনার প্রোগ্রামটি নির্দেশের একটি তালিকা বা স্ট্রিং নেবে, U D L R(উপরে, নীচে, বাম, ডান), এ পর্যন্ত গ্রহটির চারপাশে মারিওর পদক্ষেপকে ধারাবাহিক পদক্ষেপ হিসাবে উপস্থাপন করবে। প্রোগ্রামটি দুটি স্বতন্ত্র ফলাফলগুলির মধ্যে একটি আউটপুট আউটপুট দিতে পারে: একটি প্রতিনিধিত্ব করে যে মারিও এখনও বেঁচে আছেন এবং হাঁটছেন, এবং অন্যটি প্রতিনিধিত্ব করছেন যে তার হাঁটার পাশাপাশি কোথাও, মারিও সঙ্কুচিত উপগ্রহে পড়েছে।

RR:   ■ ■                 RRD:  ■ ■                 RRL:  ■ ■      
      ■ ■                       ■ ■                       ■ ■      
      ■ ■                       ■ ■                       ■ ■      
■ ■ ■ ■ ■ ■ ■ ■           ■ ■ ■ ■ ■ ■ ■ ■           ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ □ M ■           ■ ■ ■ ■ □ □ □ ■           ■ ■ ■ ■ □ M □ ■
      ■ ■    \                  ■ ■   M                   ■ ■  \
      ■ ■     Let's-a go!       ■ ■    \                  ■ ■   W-aaaaaaaaaahh!
      ■ ■                       ■ ■     W-aaaaaaaaaahh!   ■ ■

অবশ্যই, উপরের চিত্রগুলি থেকে পৃথক, আপনাকে 3D আমলে নিতে হবে। এখানে একটি চিত্র রয়েছে যা আপনাকে দৃশ্যকে আরও ভালভাবে কল্পনা করতে সহায়তা করতে পারে:

                Top 2x2 face
   <- clockwise           anticlockwise ->
   -   ■    -    ■    -    ■    -    ■   -
     /   \     /   \     /   \     /   \  
   ■       ■ ■       ■ ■       ■ ■       ■
   ■       ■ ■       ■ ■       ■ ■       ■
   ■       ■ ■       ■ ■       ■ ■       ■
   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■    Left and right
   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ M ■ ■ ■ ■ ■ ■ ■ ■ ■    edges wrap around.
   ■       ■ ■       ■ ■       ■ ■       ■
   ■       ■ ■       ■ ■       ■ ■       ■
   ■       ■ ■       ■ ■       ■ ■       ■
     \   /     \   /     \   /     \   /  
   -   ■    -    ■    -    ■    -    ■   -
   <- anticlockwise           clockwise ->
               Bottom 2x2 face

সুতরাং এই চিত্র অনুযায়ী, এই UUUUURRRRমত চেহারা হতে পারে:

   -   ■    -    ■    -    □    -    ■   -
     /   \     /   \     /   \     /   \  
   ■       ■ ■       ■ □       □ ■       ■
   ■       ■ ■       ■ □       □ ■       ■
   ■       ■ ■       ■ □       □ ■       ■
   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ M ■ ■ ■ ■ ■
   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
   ■       ■ ■       ■ ■       ■ ■       ■
   ■       ■ ■       ■ ■       ■ ■       ■
   ■       ■ ■       ■ ■       ■ ■       ■
     \   /     \   /     \   /     \   /  
   -   ■    -    ■    -    ■    -    ■   -

এবং UUUUUUUUULURRRRRRএই মত চেহারা হতে পারে:

   -   ■    -    ■    -    □    -    □   -
     /   \     /   \     /   \     /   \  
   ■       ■ ■       ■ □       ■ ■       □
   ■       ■ ■       ■ □       ■ ■       □
-> □       ■ ■       ■ □       ■ ■       □ ->
<- □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ M □ □ □ □ □ <-
   ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
   ■       ■ ■       ■ ■       ■ ■       ■
   ■       ■ ■       ■ ■       ■ ■       ■
   ■       ■ ■       ■ ■       ■ ■       ■
     \   /     \   /     \   /     \   /  
   -   ■    -    ■    -    ■    -    ■   -

বাইটস মধ্যে সংক্ষিপ্ততম প্রোগ্রাম হতে পারে W-aaaaaaaahh!

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

আউটপুট 1: এখনও জীবিত

DDDDDLUUUUU - মারিও একটি ব্রিজ পেরিয়ে এবং পিছনে পিছনে যায়।

RRRRDDDDLLL - মারিও একটি ত্রিভুজ মধ্যে হাঁটা।

LLLLLLUUUUUURRRRR - মারিও একটি বড় ত্রিভুজ মধ্যে পদচারণা।

ULLDRDDDRU - মারিও নিজেকে বিপদে ফেলেছে।

RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRR - মারিও একটি প্রচলিত পথ নেয় ... এবং নিজেকে বিপদে ফেলে দেয়।

মারিও প্রতিটি টালি ঠিক একবার অতিক্রম করে। DDDDLUUUULLLLDDDLUUULLLLDDDDLUUUULLLLDDDLUUULLLURRRUUURDDDRRRRUUURDDDRRRRUUURDDDRRRRUUUUURDDDDD DLDRDLDLLLDRRRDDDDLLLLLLLLLDRRRRRRRRRDDDDLLLDRRRDDDRUUURRRRULLLLUUUURRRULLLUUUUURDRURDRUURULURU

আউটপুট 2: ডাব্লু-আআআআআআআআআআআআআআআআআআ!

LLR - মারিও একটি পদক্ষেপ প্রত্যাহার করার চেষ্টা করে এবং পড়ে যায়।

UULDR - মারিও দু'বার টাইল পেরিয়ে বাতাসে প্রবেশের চেষ্টা করে।

RRDDDDD - মারিও প্রথম ডি তে একটি ব্রিজের উপর দিয়ে হাঁটল (নিম্নলিখিত কোনও পদক্ষেপ উপেক্ষা করুন)।

RRRRDDDDLLLL - মারিও একটি ত্রিভুজটিতে চলে এবং প্রারম্ভিক টাইলের মধ্য দিয়ে পড়ে।

LLLLLLUUUUUURRRRRR - মারিও একটি বৃহত্তর ত্রিভুজটিতে চলে এবং প্রারম্ভিক টাইলের মধ্য দিয়ে পড়ে।

UUUUUUUUUUUUUUUUUUUU - মারিও সমস্ত গ্রহের চারপাশে হাঁটা এবং শুরু টাইল মাধ্যমে পড়ে।

RURDRURDRDLDRDLDLDLULDLLUU - মারিও একটি প্রচলিত পথ নেয় এবং দিশেহারা হয়।

মারিও, তিনি যে বিপদটি পেয়েছেন তা বুঝতে পেরে কোনও উপায় নেই।

ULLDRDDDRUUU ULLDRDDDRUUL ULLDRDDDRUUR ULLDRDDDRUUD RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRR RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRU RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRL RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRD

অবশেষে, "মারিও প্রতিটি টাইল হুবহু একবারে পার করে" থেকে যে কোনও পরীক্ষার কেস অনুলিপি করুন এবং এলোমেলোভাবে একটি পদক্ষেপ পরিবর্তন বা যুক্ত করুন। মারিও পড়া উচিত। (আপনি যদি শেষের দিকে একটি পদক্ষেপ যোগ করেন তবে মারিও পাওয়ার স্টারটি ধরে ফেলবে!)

* কিছু মুখ বর্গক্ষেত্র না হওয়ায় ক্যান্টলেটেড কিউবটি আরও সঠিক শব্দ হবে তবে আপনাকে স্বীকার করতে হবে - "রোম্বিকুবকটাহেড্রন" প্রবাহটি আরও ভাল।


3
কিউবিক্স বা কিউবিকভাবে এটি সমাধানের জন্য বোনাস পয়েন্টস
স্টিফেন

এটি মারিও গ্যালাক্সি খেলার অনেক স্মৃতি ফিরিয়ে এনেছে - সহজেই আমার সর্বকালের প্রিয় গেমগুলির মধ্যে একটি।
notjagan

7
@ স্টেপহেন অ্যান্ড মারিওল্যাং: পি
ইটিএইচ প্রোডাকশনস

@ স্টেফেন যদিও এটি একটি অক্টোগন, হেক্সাগনি স্টি ... আপনি কি জানেন না, কিছু মনে করবেন না, কে হেক্স অজনিতে এটি করবে।
ম্যাজিক অক্টোপাস আরন

সর্বশেষ পরীক্ষার কেস থেকে চতুর্থ মধ্যে, আপনি অতিরিক্ত না যুক্ত করে মারিও মারা যায় না R। আমার কোডটি সঠিক কিনা তা নিশ্চিত করার জন্য আমি এই কাগজে কাজ করেছি।
স্তরের নদী সেন্ট

উত্তর:


6

রুবি, গল্ফড, 244 230 বাইট

ঠিকঠাক কাজ করার জন্য মনে হচ্ছে, আরও কিছুটা পরীক্ষা করবে।

->s{a=[8**8/5]*8
v=[-1,x=d=0,1,0]
y=m=4
s.chars{|c|a[y]&=~(1<<x) 
y+=v[e="URDL".index(c)+d&3]
x+=v[e-1]
r= ~0**q=x/4
i=q+x&1
j=q+y&1
y%9>7&&(y=4-i;x+=4-j*11-x%2;d+=r)
x&2>0&&-y/2==-2&&(y=i*7;x+=6-x%2*9+j;d-=r)
m*=1&a[y]>>x%=24}
m}

রুবি, প্রথম কার্যকারী সংস্করণ, 260 বাইট

এটি অনলাইনে চেষ্টা করুন

একটি স্ট্রিং আর্গুমেন্ট নিয়ে লাম্বদা ফাংশন। বেঁচে থাকার জন্য 4, মৃত ব্যক্তির জন্য ফিরে আসে

->s{a=[0x333333]*8
v=[0,-1,0,1]
x=d=0
y=m=4
s.chars{|c|a[y]&=~(1<<x) 
e="URDL".index(c)+d
x+=v[e%4]
y+=v[-~e%4]
p=x&-2
q=x/4%2
y%9>7&&(d-=q*2-1;y,x=4-(q+x)%2,(p+4-(q+y)%2*11)%24)
x&2>0&&-y/2==-2&&(y,x=(q+x)%2*7,(p+6-x%2*8+(q+y)%2)%24;d+=q*2-1)
m*=a[y]>>x&1}
m}

ব্যাখ্যা

বোর্ডটি 2x8 আকারের 6 টি স্ট্রিপগুলিতে প্রকাশিত হয়েছে, যা নীচে /\এবং Oঅক্ষর দ্বারা উপস্থাপিত হয়েছে । এগুলিকে 24 * 8 2 ডি মানচিত্রে ম্যাপ করা হয়, যেখানে x = (স্ট্রিপ সংখ্যা) * 4 + (স্ট্রিপের অনুভূমিক অবস্থান) এবং স্ট্রিপের উপর y = উল্লম্ব অবস্থান।

       Map        4         2         0          Initial state of array a
                 /         /         /   
                / /       / /       / /          1100110011001100110011
               / /       / /       / /           1100110011001100110011 
              O /       O /       O /            1100110011001100110011
             O O       O O       O O             1100110011001100110011
      \     / O \     / O \     / X              110011001100110011001X
     \ \   / / \ \   / / \ \   / /               1100110011001100110011
      \ \ / /   \ \ / /   \ \ / /                1100110011001100110011
       \ O /     \ O /     \ O /                 1100110011001100110011
        O O       O O       O O 
         O \       O \       O \                 X=Mario's start point 
          \ \       \ \       \ \  
           \ \       \ \       \ \    
            \         \         \
             5         3         1

এগুলি 8 টি বাইনারি সংখ্যার একটি অ্যারেতে সংরক্ষণ করা হয়, তাই এক্স বামে যেতে বৃদ্ধি পায় এবং y আরও নীচে যাচ্ছে।

অ্যারের সাথে সংখ্যার 8 টি অনুলিপি অন্তর্নিহিত করা হয় 0x33333333। এটি স্কোয়ারগুলি তৈরি করে যা মারিওকে পা রাখার অনুমতি দেওয়া হয়। মারিও যে স্কোয়ারটিতে ঘুরেছেন তার চারপাশে শূন্যে সেট করা হয়েছে এবং তিনি যে স্কোয়ারে চলেছেন তা পরীক্ষা করা হয় - তিনি বেঁচে থাকেন এতে একটি 1 রয়েছে এবং যদি এটি 0 থাকে তবে মারা যায়।

মারিও যদি তার উপরের স্ট্রিপের উপরের বা নীচে থেকে যায় তবে সে অন্য স্ট্রিপে চলে যায়। যদি সে স্ট্রিপের দিক থেকে চলে যায় তবে সে যদি y = 3 বা y = 4 দিয়ে স্কোয়ারে থাকে তবে সে অন্য স্ট্রিপে চলে যায়। যদি y 3 বা 4 না হয় তবে তিনি অন্য স্ট্রিপে যান না এবং স্কোয়ারের শেষে শেষ হয় যেখানে তার শুরু থেকেই 0 থাকে, তাই তিনি মারা যান।

কারণ ক্যামেরাটি সর্বদা মারিওর মাথার উপরে থাকে, যখনই মারিও স্ট্রিপ পরিবর্তন করে, দিকনির্দেশগুলির রেফারেন্সটি 90 ডিগ্রি দ্বারা ঘোরানো উচিত।

পরীক্ষা প্রোগ্রামে অসম্পূর্ণ

f=->s{                             #Move sequence is taken as string argument s.
  a=[0x333333]*8                   #Setup board as an array of 8 copies of 1100110011001100110011.
  v=[0,-1,0,1]                     #Displacements for moving.
  x=d=0                            #Mario starts at 0,4.
  y=m=4                            #d=offset for directions. m=4 when Mario is alive (value chosen for golfing reasons) 0 when dead.

  s.chars{|c|                      #For each character c in s
    a[y]&=~(1<<x)                  #Set the square where Mario is to 0.

    e="URDL".index(c)+d            #Decode the letter and add the offset 
    x+=v[e%4]                      #x movement direction is v[e%4]   
    y+=v[-~e%4]                    #y movement direction is v[(e+1)%4]
    p=x&-2                         #p is a copy of x with the last bit set to zero (righthand edge of strip).
    q=x/4%2                        #q is 0 for an even number strip, 1 for an odd number strip.
    y%9>7&&(                       #If y out of bounds (8 or -1)
      d-=q*2-1;                    #Adjust d so directions will be interpreted correctly on the next move.
      y,x=
        4-(q+x)%2,                 #y becomes 3 or 4 depending on the values of q and x.
        (p+4-(q+y)%2*11)%24        #If q+y is even, move 1 strip left. if even, move 2 strips right. Take x%24.  
    )
    x&2>0&&-y/2==-2&&(             #If x&2>0 Mario has walked sideways off a strip. If y is 3 or 4, move him to a different strip.
      y,x=                       
        (q+x)%2*7,                 #y becomes 0 or 7, depending on the values of q and x.
        (p+6-x%2*8+(q+y)%2)%24;    #If x%2 is even, move 2 strips left. If odd, move 1 strip right*. Pick the left or right column of the strip depending on (q+y)%2. Take x%24 
        d+=q*2-1                   #Adjust d so directions will be interpreted correctly on the next move.
    )

    m*=a[y]>>x&1                   #Multiply m by the value (0 or 1) of the current square. Mario is either alive (4) or dead (0).  
    #puts x,y,m,a.map{|i|"%022b"%i}#Uncomment this line for diagnostics.
  }
m}                                 #Return value of m.  


#Still alive, return value 4
puts f["DDDDDLUUUUU"] # Mario walks across a bridge and back.
puts f["RRRRDDDDLLL"] # Mario walks in a triangle.
puts f["LLLLLLUUUUUURRRRR"] # Mario walks in a bigger triangle.
puts f["ULLDRDDDRU"] # Mario puts himself in peril.
puts f["RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRR"] # Mario takes an unconventional route... and puts himself in peril.
puts f["DDDDLUUUULLLLDDDLUUULLLLDDDDLUUUULLLLDDDLUUULLLURRRUUURDDDRRRRUUURDDDRRRRUUURDDDRRRRUUUUURDDDDD"] 
puts f["DLDRDLDLLLDRRRDDDDLLLLLLLLLDRRRRRRRRRDDDDLLLDRRRDDDRUUURRRRULLLLUUUURRRULLLUUUUURDRURDRUURULURU"]

#Dead, return value 0

puts f["LLR"] #  Mario attempts to retrace a step and falls off.
puts f["UULDR"] #  Mario attempts to cross a tile twice and steps into air.
puts f["RRDDDDD"] #  Mario walks off a bridge at the first D (ignore any following steps).
puts f["RRRRDDDDLLLL"] #  Mario walks in a triangle and falls through the starting tile.
puts f["LLLLLLUUUUUURRRRRR"] #  Mario walks in a bigger triangle and falls through the starting tile.
puts f["UUUUUUUUUUUUUUUUUUUU"] #  Mario walks all the way around the planet and falls through the starting tile.
puts f["RURDRURDRDLDRDLDLDLULDLLUU"] # 

puts f["ULLDRDDDRUUU"] 
puts f["ULLDRDDDRUUL"] 
puts f["ULLDRDDDRUUR"] 
puts f["ULLDRDDDRUUD"] 
puts f["RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRR"] #text case in q is wrong. one more R added to make the kill.
puts f["RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRU"] 
puts f["RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRL"] 
puts f["RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRD"]

সুন্দরভাবে সম্পন্ন! আমি "স্ট্রিপ" ম্যাপিং এবং ক্যামেরা কোণের জন্য আপনি যেভাবে হিসাব করেছেন তা সত্যিই পছন্দ করি।
darrylyeo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.