গোলকধাঁধা পালাতে!


20

আপনি এই 5x5 গোলকধাঁধাতে আটকা পড়েছেন - প্রতিটি ঘর 1 থেকে 25 পর্যন্ত লেবেলযুক্ত এবং প্রস্থানটি কক্ষ 1 এ রয়েছে।

এখানে চিত্র বর্ণনা লিখুন

আপনি বর্তমানে যে ঘরে রয়েছেন সেই ইনপুট হিসাবে আপনাকে দেওয়া হবে Your

যতক্ষণ আপনি অক্ষরগুলি ব্যবহার করেন ততক্ষণ মুভিগুলি আপনার যে কোনও বিন্যাসে (তালিকা, স্ট্রিং, অ্যারে ...) আউটপুট হতে পারে n,w,e,s

এখানে সমস্ত পরীক্ষার কেস রয়েছে:

1 => empty string/list
2 => w
3 => ww
4 => swwnw
5 => wswwnw
6 => seenwnw
7 => nw
8 => wnw
9 => wwnw
10 => swwnwnw
11 => eenwnw
12 => enwnw
13 => nwnw
14 => wnwnw
15 => wwnwnw
16 => enenwnw
17 => nenwnw
18 => wnenwnw
19 => nwnwnw
20 => wnwnwnw
21 => nenenwnw
22 => enwnenwnw
23 => nwnenwnw
24 => wnwnenwnw
25 => nwnwnwnw

বাইট জিতে স্বল্পতম উত্তর!


3
রুম লেবেলিং / ইনপুট কত নমনীয়? আমরা কি 1 সূচক পরিবর্তে 0 সূচক করতে পারি? আমরা কি চরিত্রের জন্য ঘরের নম্বর নিতে পারি (চিন্তাভাবনা, বেস 36 হিসাবে)?
চ্যাস ব্রাউন

2
@ থেরান্ডমগুয়ে না, আপনাকে এই নির্দিষ্ট গোলকধাঁধাটি পরিচালনা করতে হবে।
আরনাউড

6
যেহেতু এটি সম্ভব, আমি মনে করি সম্ভাব্য সমস্ত মামলাগুলি পরীক্ষার ক্ষেত্রে অন্তর্ভুক্ত করা উচিত।
জোনাথন ফ্রেচ

1
@ আনরেলেটেড স্ট্রিং এই প্রশ্নটি 1 ইনপুট নেয় এবং এর ইনপুটটির উপর ভিত্তি করে আলাদা পাথ আউটপুট দেয়। আমি বিশ্বাস করি এই প্রয়োজনীয়তা কলমোগোরভ-জটিলতার ট্যাগের সাথে খাপ খায় না ।
tsh

2
কেউ উত্তর প্রদান করতে হবে গোলকধাঁধা
ড্রাকো

উত্তর:


20

পাইথন 2 , 64 বাইট

def f(n):d=0x1211252b5375>>2*n-4&3;print"nwes"[d];f(n+d*3+d%2-5)

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

একটি ফাংশন যা ত্রুটি সহ সমাপ্ত করে প্রতি লাইনে একটি দিক প্রিন্ট করে।

0x1211252b5375বেস 4 এর ধ্রুবক এনকোডগুলি dপ্রতিটি ঘরের নম্বর থেকে 0 থেকে 3 নম্বর হিসাবে আমরা যাতায়াত করি নিষ্কাশন >>2*n-4&3অঙ্কটি n=1কোডটি শেষ করে যখন একটি নেতিবাচক শিফট ত্রুটি দেওয়ার জন্যও ডিজাইন করা হয় । nদিকনির্দেশ থেকে কোন মানচিত্র dহিসাবে গণনা করা হয় এমন অফসেটের মাধ্যমে আমরা রুম নম্বর আপডেট করি d*3+d%2-5:

d   d*3+d%2-5
0  -> -5
1  -> -1
2  ->  1
3  ->  5 

1
আমি নিশ্চিত নই যে এটি যেমন রয়েছে তেমন বৈধ কিনা, ফাংশনগুলি পুনরায় ব্যবহারযোগ্য হতে হবে এবং এই ফাংশনটি কল করার পরে এক্সিকিউশন চালিয়ে যেতে সক্ষম হওয়ার জন্য আপনার ত্রুটি ফাঁদে পড়া ( try/ except) দরকার ।
এরিক আউটগলফার


6

05 এ বি 1 ই , 30 29 বাইট

-1 বাইট প্রধান সংখ্যাগুলির সাথে একটি অলৌকিক কাকতালীয় ধন্যবাদ

[Ð#•θzƶ‰`Ó•4вsè<DˆØ·5-+}'‹™¯è

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

[                      }    # infinite loop:
 Ð                          #  triplicate the room number (initially, the input)
  #                         #  break if room number == 1
   •θzƶ‰`Ó•4в               #  compressed list 202232302231102210202010
             sè             #  use the room number to index into that list
               <            #  decrement
                Dˆ          #  add a copy to the global array
                  Ø         #  nth prime (-1 => 0, 0 => 2, 1 => 3, 2 => 5)
                   ·        #  double
                    5-      #  subtract 5
                      +     #  add that to the room number
'‹™                         # dictionary string "western"
   ¯                        # push the global array
    è                       # index (wraps around, so -1 => n, 0 => w, 1 => e, 2 => s)

1
11খালি স্ট্রিংয়ের পরিবর্তে ইনপুটটির জন্য এই আউটপুটগুলি (সহজ ফিক্সটি একটি শীর্ষস্থানীয় যোগ করা হবে õ?)। তা ছাড়া সুন্দর উত্তর!
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন সেই ভুলটি নির্দেশ করার জন্য ধন্যবাদ! আমি একটি একক বাইট ফিক্স পেয়েছি।
গ্রিমি

5

রুবি , 72 62 বাইট

f=->n{n<2?'':' en  sw'[x=4*18139004[n]+6*4267088[n]-5]+f[n+x]}

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

কিভাবে?

এখানে কৌশলটি হ'ল প্রতিটি কক্ষের জন্য পরবর্তী পদক্ষেপটি তৈরি করতে 2 টি ধ্রুবক ব্যবহার করা, তারপরে পুনরাবৃত্তিভাবে সমস্যার সমাধান করুন।

2 কনস্ট্যান্ট 18139004 এবং 4267088 বাইনারি স্ট্রিংগুলি পরের চলার দিকনির্দেশনা দেয়, প্রতিটি ঘরের জন্য উভয় থেকে একটি বিট বের করে আমরা পেতে পারি:

"n" = 4*0+6*0-5 = -5
"w" = 4*1+6*0-5 = -1
"e" = 4*0+6*1-5 = +1
"s" = 4*1+6*1-5 = +5

চারপাশে স্থানান্তর এবং একক বড় বাইনারি নম্বর আইএমএইচও মাস্ক করার চেয়ে সহজ Eas

যখন আমরা দিকনির্দেশ পাই, আমরা "en sw" স্ট্রিং থেকে সংশ্লিষ্ট চিঠিটি বের করি:

  1   5
  |   |
" en  sw"
   |   |
  -5  -1

এবং ঘরে পুনরাবৃত্তভাবে এগিয়ে যান [n + x]



3

পার্ল 5 ( -n), 94 বাইট

গ্রিমিকে ধন্যবাদ 5-বাইট

@A=map/./g,__wwswsnwwseenwwenwnwnenwn;%H=(n,-5,s=>5,e,1,w,-1);$_+=$H{$,=$A[$_]},say$,until$_<2

Tio





1
আপনার অর্থ কি এটি আলাদা উত্তর হিসাবে পোস্ট করা উচিত?
গ্রিমি

1
হ্যাঁ যেহেতু মনে হয় আপনি বেশিরভাগ কাজ করেছেন, তাই আমরা কীভাবে সর্বদা স্থান বাঁচাতে পারি তা দেখতে আকর্ষণীয় ছিল
নাহুয়েল ফিউইলুল


2

জাভাস্ক্রিপ্ট, 80 73 71 বাইট

চাসের পাইথন সমাধান থেকে গৃহীত তাই +1তাকেও খুশি করুন ।

f=n=>--n?(d=" wwswsnwwseenwwenwnwnenwn"[n])+f(n+~~{n:-4,s:6,e:2}[d]):``

অনলাইনে চেষ্টা করে দেখুন!

1 বাইট আর্নল্ডকে ধন্যবাদ রক্ষা করেছে ।


ধন্যবাদ, @ আর্নল্ড :) সবেমাত্র আমাকেও তা আবিষ্কার করেছিল।
শেগি

2

কাঠকয়লা , 43 40 বাইট

NθW⊖θ«≔I§”)“⊞x⟧∧⎚⁵2”ιι§nwesι≧⁺⁻⁺﹪ι²×³ι⁵θ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। @ চ্যাসব্রাউন এবং @ এক্সনর উভয়ের উত্তরগুলির ভিত্তিতে। ব্যাখ্যা:

Nθ

রুম ইনপুট করুন।

W⊖θ«

লুপ ভেরিয়েবলটি iরুম সংখ্যার চেয়ে একটিতে কম সেট করুন এবং এটি শূন্য-না হওয়াতে পুনরাবৃত্তি করুন।

«≔I§”)“⊞x⟧∧⎚⁵2”ιι

সংকুচিত স্ট্রিং থেকে দিকটি বের করুন 0113130113220112010102010। (শীর্ষস্থানীয় 0কেবল একটি ফিলার ডিজিট))

§nwesι

দিকটি মুদ্রণ করুন।

≧⁺⁻⁺﹪ι²×³ι⁵θ

নতুন ঘরের নম্বর গণনা করতে @ xnor এর সূত্র ব্যবহার করুন।


2

জেলি , 30 29 বাইট

“þ&ƊĿñ÷°e’b6Ḥ_5Ż⁸+ị¥ƬI‘ị“®ȯẹ»

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

একটি মোনাডিক লিঙ্ক, প্রারম্ভিক সেলটি নিচ্ছে এবং দিকনির্দেশগুলি সহ একটি স্ট্রিং ফিরিয়ে আনবে।

আমি আসলে জেলি এর অভিধান 'Kennesaw' মত একটি শব্দ আছে যা ভালবাসেন (আটলান্টা, জর্জিয়া শহর উত্তর-পশ্চিমে), এখানে ব্যবহৃত কারণ সঙ্গে তা সূচিবদ্ধ [5, 1, -5, -1] + 1দেয় nesw!

ব্যাখ্যা

“þ...e’                    | Base-250 integer 1962789844189344852  
       b6                  | Convert to base 6 (2, 2, 5, 2, 5, 0, 2, 2, 5, 3, 3, 0, 2, 2, 3, 0, 2, 0, 2, 0, 3, 0, 2, 0)
         Ḥ                 | Double
          _5               | Subtract 5
            Ż              | Prepend 0
             ⁸  ¥Ƭ         | Using this as the right argument and the original link argument as the left argument, loop the following as a dyad until there is no change, collecting up results
              +            | - Add the left argument to:
               ị           |   - The left argument indexed into the right argument
                  I        | Differences between consecutive numbers
                   ‘       | Increment by 1
                    ị“®ȯẹ» | Index into "Kennesaw"

2

পিএইচপি , 110 বাইট

চ্যাস ব্রাউন এর দুর্দান্ত উত্তর বা xnor এর দুর্দান্ত উত্তরের কোনও বন্দর নয় এমন একটি সমাধান । আমি জানি এটি দীর্ঘতর তবে আমি একটি আলাদা সমাধান করতে চাই!

for($n=$argn;$n>1;$n=ord($s[$n*2+1])%30)echo($s='0000w<w sEw"s)n w%w&s-e*e+n&w+w,e/n*w/n,w1n.e5n0w5n2')[$n*2];

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

আমি একটি ম্যাপিং স্ট্রিং তৈরি করেছি যার বোর্ডে প্রতিটি কক্ষের জন্য 2 টি অক্ষর রয়েছে। প্রতিটি কক্ষের জন্য প্রথম অক্ষরটি একটি পদক্ষেপ (এন / ই / এস / ডাব্লু) বা 0দ্বিতীয় অক্ষরের এএসসিআইআই কোড মোড 30 অন্য একটি সেল নম্বর প্রদান করবে যা আমাদের সেল ( cell < 2) থেকে প্রস্থান না হওয়া অবধি পুনরাবৃত্ত মোডে তার চলন অনুসরণ করা উচিত ।

8 ইনপুট জন্য উদাহরণস্বরূপ:

  • কক্ষের জন্য 2 টি অক্ষর হ'ল 8:w%
  • এর অর্থ হল মুদ্রণ করা wএবং এর ঘরে চলতে চালিয়ে যাওয়া%
  • এর ASCII কোড %37 যা 30 এর Mod হবে 7, তাই পরবর্তী সেলটি অনুসরণ করা হবে 7
  • কক্ষের জন্য 2 টি অক্ষর হ'ল 7: n (সর্বশেষ অক্ষরটি স্থান, ASCII কোড = 32)
  • এর অর্থ n32 মোড 30 কোটির জন্য মুদ্রণ এবং চালনা অবিরত 2
  • কক্ষের জন্য 2 টি অক্ষর হ'ল 2: w<(শেষ অক্ষর ASCII কোড = 60)
  • এটি মুদ্রণ মানে wএবং 60 গেলিক ভাষার 30 যা কক্ষের জন্য প্যাচসমূহ সঙ্গে অবিরত 0
  • সেল সংখ্যাটি এর চেয়ে কম হলে 2লুপ বন্ধ হয়ে যায়!
  • চূড়ান্ত মুদ্রিত ফলাফল: wnw

পিএইচপি , 75 বাইট

এই সংস্করণটি গ্রিমি লিখেছেন , এটি আমার আসল উত্তরের চেয়ে 35 বাইট কম, কারণ তিনি চতুর ! গ্রিমির মন্তব্য: "4 * 25 <256, সুতরাং আপনার কেবল ঘরে প্রতি 1 বাইট প্রয়োজন, 2 নয়"

for($n=$argn;$n=ord("0\0~f;6o4R:s%ql&rup*@^tIDbx"[$n%25]);)echo news[$n%4];

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


পিএইচপি , 71 বাইট

আরনাউল্ডের উত্তরের এই বন্দরটি যা এক্সনরের উত্তরের বন্দর , তবে এটি পিএইচপি-তে সংক্ষিপ্ত রূপান্তরিত হওয়ার কারণে পুনরাবৃত্ত ফাংশনের পরিবর্তে একটি লুপ হিসাবে।

for($n=$argn;--$n;$n+=$d*3+$d%2-4)echo nwes[$d=79459389361621/4**$n&3];

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


2
4 * 25 <256, সুতরাং আপনার প্রতি সেল প্রতি 1 বাইট প্রয়োজন, 2 নয়: এটি অনলাইনে চেষ্টা করুন!
গ্রিমি

1
@ গ্রিমি, আশ্চর্যজনক, আমি মনে করি আপনাকে এটির পৃথক উত্তর হিসাবে পোস্ট করতে হবে, এটি যথেষ্ট আলাদা।
রাত 2

1
আমি এটি করতে যাচ্ছি না, সুতরাং আপনি এটি নিজের উত্তরে অন্তর্ভুক্ত করবেন বা কেবল একটি মন্তব্য হিসাবে রেখে যাবেন তা চয়ন করুন।
গ্রিমি

1
@ গ্রিমি, আপনার নামের সাথে আপনার সংস্করণ যুক্ত করেছে। যাইহোক, ধন্যবাদ.
রাতে 2

2

সি (ঝনঝন) , 81 বাইট

v;f(p){p-1&&putchar(v="00wwswsnwwseenwwenwnwnenwn"[p])+f(p+=v%5?6-v%8:v%2?5:-5);}

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

@ টমমিলে 2k পরামর্শ -8 ধন্যবাদ! + পুনরাবৃত্ত কল

সি (ঝনঝন) , 90 বাইট

v;f(p){for(char*l="00wwswsnwwseenwwenwnwnenwn";p-1;p+=v%5?6-v%8:v%2?5:-5)putchar(v=l[p]);}

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

সমস্ত সংকোচিত সমাধানের মতো।


1
সংক্ষিপ্ত করা যেতে পারে:v;f(p){for(;p-1;p+=v%5?6-v%8:v%2?5:-5)putchar(v="00wwswsnwwseenwwenwnwnenwn"[p]);}
টমমিলি 2 কে

1

05AB1E , 45 43 বাইট

õ?[Ð#.•DUo¢ê`Ω÷‰₂¡)R€ûK•¦sè©?Ž₁9₂в6-'€Ã®kè+

পোর্ট অফ @ChasBrown এর পাইথন 2 উত্তর

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

õ?               # Output an empty string
                 # (to overwrite the implicit output if the input is 1)
[                # Start an infinite loop:
 Ð               #  Triplicate the top of the stack
                 #  (which is the (implicit) input in the first iteration)
  #              #  If it's exactly 1: stop the infinite loop
  .•DUo¢ê`Ω÷‰₂¡)R€ûK
                 #  Push compressed string "a  wwswsnwwseenwwenwnwnenwn"
   ¦             #  Remove the first character
    sè           #  Swap to get the number, and use it to index into the string
      ©          #  Store it in variable `®` (without popping)
       ?         #  Print it without trailing newline
  Ž₁9            #  Push compressed integer 22449
     ₂в          #  Convert to base-26 as list: [1,7,5,11]
       6-        #  Subtract 6 from each: [-5,1,-1,5]
         '€Ã    '#  Push dictionary string "news"
            ®k   #  Get the index in this string of character `®`
              è  #  And use that to index into the integer-list
               + #  And add it to the originally triplicated integer

খনি (সমস্ত চারটি বিভাগে) এই 05AB1E ডগা দেখুন কেন বুঝতে .•DUo¢ê`Ω÷‰₂¡)R€ûK•হয় "a wwswsnwwseenwwenwnwnenwn"; Ž₁9হয় 22449; Ž₁9₂вহয় [1,7,5,11]; এবং '€Ãহয় "news"


1
এই সুবিধাজনক অভিধান স্ট্রিং অবশ্যই ভাল খবর ছিল!
নীল

নিল অবশ্যই :) যদিও আপাতদৃষ্টিতে অভিধানের স্ট্রিংটি westernআরও ভাল। ; পি
কেভিন ক্রুইজসেন

1

বাশ , 120 বাইট

S=__wwswsnwwseenwwenwnwnenwn
N=n-5w-1s05e01
for((i=$1;$i>1;i+=$j)){ d=${S:$i:1};j=${N:`expr index $N $d`:2};printf $d; }

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

আমি স্ট্রিংটিকে নিবলগুলি হিসাবে বিট-প্যাক করার চেষ্টা করেছি, তবে ডিকোডিংয়ের জন্য সংরক্ষিত সংখ্যাটির চেয়ে আরও বেশি অক্ষর প্রয়োজন।

কিভাবে এটা কাজ করে:

S=__wwswsnwwseenwwenwnwnenwn

স্ট্রিং $ এস প্রতিটি ঘরের জন্য একক অক্ষর (এন, ডাব্লু, এস, ই) ধারণ করে যা দেখায় যে কোন এক রুমে প্রস্থানের দিকে যেতে হবে, কক্ষগুলি 0 এবং 1 এড়িয়ে চলেছে।

N=n-5w-1s05e01

স্ট্রিং $ N এর প্রতিটি দিক পরিবর্তনের জন্য বর্তমান কক্ষের নম্বর থেকে / বিয়োগ করার বদ্বীপ রয়েছে (n: -5, w: -1, s: +5, e: +1)

for((i=$1;$i>1;i+=$j)){ d=${S:$i:1};j=${N:`expr index $N $d`:2};printf $d; }

কমান্ড লাইনে (room 1) প্রদত্ত রুম নম্বরটির সমান $ i দিয়ে শুরু করুন। সূচক index i স্ট্রিং $ এস থেকে $ d এ অক্ষর নির্ধারণ করুন। পাশের ঘরে যাওয়ার জন্য দিকনির্দেশের জন্য $ N থেকে ডেল্টা মানটি $ j এ নির্ধারণ করুন।

Direction d নেওয়ার জন্য পরবর্তী দিকটি মুদ্রণ করুন।

$ জে / থেকে from i তে ব-দ্বীপটি যুক্ত / বিয়োগ করুন।

আমরা রুম # 2 ছাড়ার আগ পর্যন্ত লুপ (যখন $ i> 1)।



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