কোপা শেল সিকোয়েন্স


19

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

ধরুন একটি সুপার মারিও স্তরটি কেবলমাত্র একটি ব্লকের উঁচু এবং প্রতিটি গ্রিড সেলটি একটি ইট বা খালি স্থান, বাম দিকের কোষ ছাড়া ডানদিকে চলমান শেল রয়েছে। স্তরটিও পর্যায়ক্রমিক , সুতরাং শেলটি যদি স্তরের ডান বা বাম প্রান্তটি থেকে প্রস্থান করে তবে এটি বিপরীত দিকে আবার প্রবেশ করবে। এই পরিস্থিতিতে শেলটি আরও কিছু না পাওয়া পর্যন্ত স্তরের সমস্ত ইট ব্লকগুলি বন্ধ করে দেওয়া এবং ভাঙ্গতে থাকবে। শেষ ইটের ব্লকটি ভেঙে যাওয়ার পরে শেলটি কতদূর ভ্রমণ করবে?

চ্যালেঞ্জ

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

কোওপা শেলটি স্তরের একেবারে বাম প্রান্তে sertedোকানো হয় এবং প্রাথমিকভাবে ডানদিকে অগ্রসর হয়। উদাহরণস্বরূপ, ইনপুটটির সাথে সম্পর্কিত স্তরটি 39হ'ল

>100111

কারণ 100111বাইনারি 39, এবং >এবং <ডান প্রতিনিধিত্ব করেন এবং যথাক্রমে শাঁস চলন্ত ত্যাগ করেন।

একেবারে শেষ ইটের ব্লক (ওরফে 1) নষ্ট হয়ে যাওয়ার পরে আপনাকে শেল দিয়ে ভ্রমণ করা মোট দূরত্বটি মুদ্রণ করতে বা ফিরে আসতে হবে ।

জন্য আউটপুট 39হয় 7এবং এই মত স্তর বর্ণন পরিবর্তন:

Level      Cumulative Distance
>100111    0
<000111    0
>000110    0
0>00110    1
00>0110    2
000>110    3
000<010    3
00<0010    4
0<00010    5
<000010    6
000001<    7
000000>    7  <-- output

একইভাবে, আউটপুট 6হল 1:

Level    Cumulative Distance
>110     0
<010     0
001<     1
000>     1  <-- output

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

রেফারেন্স জন্য, এখানে ইনপুট জন্য আউটপুট হয় 0থেকে 20:

0 0
1 0
2 0
3 0
4 0
5 0
6 1
7 1
8 0
9 0
10 1
11 2
12 2
13 1
14 3
15 3
16 0
17 0
18 1
19 3
20 2

এবং এখানে ইনপুট আপ আউটপুট 1000

উত্তর:


6

সিজেম, 29 26 24 বাইট

3 বাইট সংরক্ষণের জন্য Sp3000 ধন্যবাদ।

q~2b{_1&}{W\({%}*0+}w],(

পরীক্ষা স্যুট. (এটি STDIN এ প্রদত্ত পূর্ণসংখ্যার 0 থেকে সমস্ত ফলাফল মুদ্রণ করে))

ব্যাখ্যা

এটি স্পেসটিকে তার মাথার দিকে কিছুটা ঘুরিয়ে দেয়: বাইনারি স্ট্রিংয়ের মাধ্যমে শেলটি সরিয়ে না দেওয়ার পরিবর্তে, আমরা বাইনারি স্ট্রিংটি স্থানান্তরিত এবং বিপরীত করি যেমন শেলটি সর্বদা সামনে থাকে, ডানদিকে নির্দেশ করে:

q~      e# Read and evaluate the input.
2b      e# Convert to base-2 to get the "level".
{_1&}{  e# While there is a 1 in the level...
  W\    e#   Put a -1 below the level.
  (     e#   Pull off the first digit, i.e. the cell the shell is pointing at.
  {     e#   If it's a 1 (i.e. a brick)...
    %   e#     Reverse the level, consuming the -1. This isequivalent to reversing the 
        e#     shell in place.
  }*
  0+    e#   Append a zero. If the cell was a brick, this just replaces it with an empty
        e#   cell. Otherwise, this rotates the level by one cell. This is equivalent 
        e#   to moving the shell one cell through the periodic level.
        e#   Note that if the leading cell was 0, the -1 remains on the stack.
}w
],(     e# Wrap the stack in an array, get its length and decrement.

5

পাইথ, 24 বাইট

&.WsH_XZeaYxZ1 0jQ2ssPBY

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

নিম্নলিখিত 22 বাইট কোডেরও কৌশলটি করা উচিত। পাইথ সংকলকটিতে বাগ করার কারণে এটি বর্তমানে কাজ করে না।

&u_XGeaYxG1ZjQ2)ssPBPY

সম্পাদনা করুন: বাগ সংশোধন করা হয়েছে, তবে অবশ্যই সমাধান গণনা করে না।

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

সামনে এবং পিছন থেকে বিকল্প আমি নিম্নলিখিতটি করি:

  • আমি একটি 1 অনুসন্ধান
  • একটি তালিকাতে রেখে এই সূচকটি মনে রাখবেন
  • এটি 1 তে 0 তে আপডেট করুন

যখন কোনও 1s অবশিষ্ট নেই, আমি দূরত্বটি গণনা করি। গুরুত্বপূর্ণ: শেলটি শেষ দূরত্ব ব্যতীত তালিকার প্রতিটি দূরত্বকে দুবার (এগিয়ে এবং পিছনে) সরিয়ে দেয়।

&.WsH_XZeaYxZ1 0jQ2ssPBY   implicit: Y = empty list
                jQ2        convert input number to binary
 .WsH                      start with Z=^; 
                           while the sum(Z) > 0, apply the the following to Z:
           xZ1                index of 1 in Z
         aY                   append this to Y
        e                     take the last element of Y (=this index)
      XZ       0              set this 1 (at index ^) in Z to 0
     _                        and revert the order of Z
                           this returns a list of zeros
&                          don't print ^, print the next thing
                     PBY   creates the list [Y, Y[:-1]]
                    s      combine these lists
                   s       sum up the distances
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.