মৃত ব্যাঙ হাঁটা


17

ভূমিকা

জনি ফ্রগার খেলতে চায়। তবে তিনি খুব ভাল নন। আসলে, তিনি কেবলমাত্র এগিয়ে যাওয়ার চেষ্টা করবেন, এবং প্ল্যাটফর্মগুলি সরানোর পরেই।

জোনির ব্যাঙ পথের শেষ প্রান্তে পৌঁছাতে পরিচালিত করে বা তার পথে মারা যায় কিনা তা সন্ধান করুন।

চ্যালেঞ্জ

প্রোগ্রামটি ইনপুট হিসাবে 0এস এবং 1এস দ্বারা রচিত একটি ফ্রোগার গ্রিড নিম্নলিখিত ফর্ম্যাট সহ প্রাপ্ত হবে:

  • গ্রিডটি এলোমেলো প্রস্থ এবং দৈর্ঘ্যের এবং কমপক্ষে 3x3 এর হবে
  • 1 প্ল্যাটফর্ম প্রতিনিধিত্ব করে
  • 0 জল প্রতিনিধিত্ব করে
  • F ব্যাঙের প্রারম্ভিক অবস্থান উপস্থাপন করে
  • গ্রিডের প্রতিটি প্রথম এবং শেষ লাইনটি কেবলমাত্র দ্বারা তৈরি করা 1হবে এবং সরানো হবে না এবং ব্যাঙটি Fশেষ লাইনে এলোমেলোভাবে স্থাপন করা হবে
  • প্রতিটি মধ্যবর্তী স্তর সর্বদা চলমান থাকবে এবং প্রতিটি লাইনের শেষে একটি <বা >এটি থাকবে যা নির্দেশ করে যে এটি বাম বা ডানে সরে গেছে

এই চিহ্নগুলি আপনার নিজের সাথে প্রতিস্থাপন করার অনুমতি রয়েছে, যতক্ষণ না সেগুলি সমস্ত স্বতন্ত্র এবং আপনি আপনার উত্তরে প্রতিস্থাপনগুলি নির্দিষ্ট করেন।

ইনপুটটি কোনও সামঞ্জস্যপূর্ণ বিন্যাসে হতে পারে (লাইন ব্রেকগুলির সাথে স্ট্রিং, স্ট্রিংগুলির অ্যারে, অক্ষরের অ্যারে, ...)।

চ্যালেঞ্জ বিধি

  • প্রতিটি পালা, সমস্ত প্ল্যাটফর্মগুলি চিহ্ন <বা >চিহ্ন দ্বারা নির্দেশিত দিকের ভিত্তিতে একটি স্কোয়ার সরানো হবে
  • প্ল্যাটফর্মগুলি গ্রিডের অন্যদিকে আবার উপস্থিত হবে যদি তারা "স্ক্রিন" বন্ধ করে দেয়
  • ব্যাঙ যদি চলন্ত প্ল্যাটফর্মে থাকে তবে এটি তার সাথে চলবে
  • এর পরে, ব্যাঙ শীর্ষ সারির দিকে এক বর্গ লাফিয়ে উঠবে। ব্যাঙ প্রতিটি মোড় সরানো হবে।
  • ব্যাঙটি পানিতে ঝাঁপিয়ে পড়লে ( 0) বা এটি একটি চলমান প্ল্যাটফর্মের সাথে গ্রিডের পাশে স্পর্শ করে

আপনার প্রোগ্রামটিকে সত্যবাদী মানের আউটপুট দিতে হবে যদি ব্যাঙ বেঁচে থাকে এবং অন্যথায় মিথ্যা মান value

এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।

উদাহরণ

উদাহরণ 1

ইনপুট

11111
00111>
00101<
1F111

আউটপুট

1

ফাঁসি

টার্ন 1:

11111
10011
01010
1F111

11111
10011
0F010
11111

মোড় 2:

11111
11001
F0100
11111

11111
F1001
10100
11111

ঘুরুন 3:

11111
1F100
01001
11111

1F111
11100
01001
11111

উদাহরণ 2

ইনপুট

11111
00100<
00100<
1F111

আউটপুট

0

ফাঁসি

টার্ন 1:

11111
01000
01000
1F111

11111
01000
0F000
11111

মোড় 2:

11111
10000
F0000
11111

11111
F0000
10000
11111

ঘুরুন 3:

11111
00001
00001
11111

মধ্যবর্তী লাইনগুলি কি সর্বদা চলমান থাকবে? আমরা কি ইনপুট হিসাবে লাইনগুলির একটি তালিকা নিতে পারি? যদি কোনও লাইন চলমান না থাকে তবে আমরা কী ধরে নিতে পারি যে এটি শেষ হয়ে গেছে অন্য কোনও চরিত্রের সাহায্যে <বা >আমরা ইনপুট হিসাবে আয়তক্ষেত্রাকার অ্যারে নিতে পারি? যাইহোক, দুর্দান্ত চ্যালেঞ্জ!
dylnan

@ এললান আমি এটি চ্যালেঞ্জ পাঠ্যে স্পষ্ট করে দিয়েছি। মধ্যবর্তী স্তর সর্বদা চলমান থাকবে এবং সর্বদা একটি <বা >শেষে থাকবে।
বিজিআর ওয়ার্কার

ব্যাঙের সামনে উপস্থিত থাকলেও কি প্রতিটি ঘুরে সামনে এগিয়ে 0যায়, বা এটি পরবর্তীটির জন্য অপেক্ষা করবে 1? যদি এটি অপেক্ষা করতে 1পারে তবে এটি প্রতিটিটি এগিয়ে যাবে, বা এটি স্মার্টভাবে অপেক্ষা করতে পারে? 11111 00001< 00011< 11F11উদাহরণস্বরূপ, পরীক্ষার ক্ষেত্রে এটি মিথ্যা হবে কারণ এটি জলে লাফ দেয় ( পদক্ষেপের পেস্টবিন ); এটি কি মিথ্যা হবে কারণ এটি ফ্রেমের বাইরে চলে যায় ( পদক্ষেপের পেস্টবিন ); অথবা এটি সত্য হবে কারণ এটি এগিয়ে যাওয়ার আগে দ্বিতীয় প্ল্যাটফর্মের জন্য স্মার্টলি অপেক্ষা করে ( পদক্ষেপের পেস্টবিন )?
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন এটি প্রতিটি মোড় ঘুরিয়ে দেয় এবং আনন্দের সাথে আত্মহত্যা করবেন (যেমন আমি বলেছি, জনি খুব ভাল খেলোয়াড় নয়)
বিগ্রার ওয়ার্কার

@ বিজিআর ওয়ার্কার ঠিক আছে, এটি চ্যালেঞ্জটিকে প্রকৃতপক্ষে আরও কার্যকর করতে সক্ষম করে। :) সম্ভবত এটিকে চ্যালেঞ্জের বর্ণনায় সম্পাদনা করুন, ব্যাঙ প্রতিটি পালা এগিয়ে যাবে, এমনকি এটি যদি ঝাঁপিয়ে পড়ে 0
কেভিন ক্রুইজসেন

উত্তর:


4

পাইথন 2 , 168 165 152 145 137 129 বাইট

s=input();x=s[-1].find('F');L=len(s[0]);i=k=1
for l in s[-2:0:-1]:d=('<'in l)%-2|1;k*=l[(x-d*i)%L]>'0'>-1<x+d<L;x+=d;i+=1
print k

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

ইনপুট ফর্ম্যাট স্ট্রিংগুলির একটি তালিকা; সমস্যা বিবৃতিতে বর্ণিত অক্ষরগুলির অর্থ রয়েছে।

ব্যাখ্যা:

iটার্ন নম্বর (টার্ন 1 দিয়ে শুরু); xসেই মোড়ের শুরুতে ব্যাঙের অবস্থান।

ব্যাঙটি যে সারিটি পাড়াতে চলেছে তা হ'ল স্ট্রিং l(নোট করুন কাটি কাটা দিয়ে, এগুলি নীচের দিকে শীর্ষে আসে)। d=('<'in l)%-2|1ফলন -1বা 1সারিটি যে দিকে চলেছে তার উপর নির্ভর করে।

যেহেতু এটিই আপনার iপালা, সেই সারিটি এটির আসল অবস্থান থেকে iবাইট দ্বারা স্থানান্তরিত হবে ; এবং তাই ব্যাঙটি যে চরিত্রটিতে ঝাঁপিয়ে পড়তে চলেছে সে সারিটির প্রস্থটি l[(x-d*i)%L]কোথায় L, তাই আমরা চাইলে সেই চরিত্রটি সমান হয় '1'; যেমন >'0',।

উপরন্তু, আমরা চেক করার জন্য যে FROGGER শুরুতে প্রান্ত বন্ধ স্থানান্তরিত করা হবে না চান পরবর্তী পালা; এটি হ'ল ভাবের কাজ -1<x+d<L

এই অবস্থাগুলি শৃঙ্খলিত (যেহেতু) '0'>-1 সর্বদা True); এবং যদি কোনও সময়ে ফলাফলের মত প্রকাশ মিথ্যা হয় kতবে হয়ে যাবে (এবং তারপরেই থাকবে) 0

যাই হোক না কেন, আমরা ব্যাঙের অবস্থান আপডেট করি x+=d এবং সারি নম্বরটি ; তারপরে লাথার, ধুয়ে ফেলা, পুনরাবৃত্তি করুন।


1

পাইথন 2 , 246 245 244 242 বাইট

জনাব এক্সকোডারকে -3 বাইট ধন্যবাদ -1 জনাথন ফ্রেচের কাছে
বাইট ধন্যবাদ

m=input()
exec"""for i,r in enumerate(m):
 d=-int(min('1',r[-1]));q=r[d*2]
 if m[i+1:]:r=sum([r[d+1:d-1],[[q,' '][q<'L']]][::d-~d],[])+r[-1:]
 if'F'in r:j=r.index('F');r[j]='L';m[i-1][j]=min('F',m[i-1][j])
 m[i]=r
"""*~-len(m)
print'F'in m[0]

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

ব্যাখ্যা

  • d প্রতিটি স্তরটি যে দিকে এগিয়ে যাবে সে দিকটি
  • q চরিত্রটি যা চারপাশে জড়িয়ে থাকবে
    • [q,' '][q<'L'] ব্যাঙটি অফ স্ক্রিনটি ফেলে দেবে
  • sum([r[d+1:d-1],[[q,' '][q<'L']]][::d-~d],[])+r[-1:] শেষ অক্ষরটি (দিকনির্দেশ) সরিয়ে দেবে, তারপরে প্রথম অক্ষরটি সরিয়ে ফেলবে এবং এটিকে যুক্ত করবে বা দ্বিতীয় শেষটি সরিয়ে ফেলবে এবং এটিকে পূর্ববর্তিত করবে (এর উপর ভিত্তি করে) d পূর্ববর্তীভাবে যুক্ত ), এবং দিকটি পিছনে যুক্ত করবে, পুরো সারিটি কার্যকরভাবে বাম / ডানে সরিয়ে নিয়েছে।
  • if'F'in r:j=r.index('F');r[j]='L';m[i-1][j]=min('F',m[i-1][j]) ব্যাঙ এগিয়ে লাফিয়ে তোলে
  • min('F',m[i-1][j]) ব্যাঙ জলে পড়বে
  • অক্ষরের তুলনা ( minএবং <) ক্রম অনুসরণ করে' ' < '0' < '1' < 'F' < 'L'

ইনপুটটি অক্ষরের তালিকার একটি তালিকা হবে:
' '- জল
'F'- ব্যাঙ
'L'- প্লাটফর্ম
'0'- স্তরটি বাম
'1'দিকে সরান - স্তরটি ডানদিকে সরান


if i<len(m)-1সম্ভবত হতে পারে if~-len(m)>i
জোনাথন ফ্রেচ

0

জাভা 8, 293 277 বাইট

a->{for(int l=a.length-1,x=a[l].indexOf('F'),y=l,i,t=a[0].length()-1,b;y>0;y--){for(i=l;i-->1;a[i]=a[i].endsWith("<")?a[i].substring(1,t+1)+a[i].charAt(0*(x-=b))+"<":a[i].charAt(t)+a[i].substring(0*(x+=b),t)+">")b=i==y?1:0;if(x<0|x>t||a[y].charAt(x)<49)return 0>1;}return 1>0;}

চ্যালেঞ্জ বিবরণে বর্ণিত হিসাবে ডিফল্ট অক্ষরগুলি ব্যবহার করে ( 01F<>)।

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

ব্যাখ্যা:

a->{                         // Method with String-array parameter & boolean return-type
  for(int l=a.length-1,      //  Amount of rows minus 1
       x=a[l].indexOf('F'),  //  Start x-position of the frog
       y=l,                  //  Start y-position of the frog
       i,                    //  Index-integer
       t=a[0].length()-1,    //  Length of the rows minus 1
       b;                    //  Temp integer
       y>0;                  //  Loop as long as the frog hasn't reached the other side
       y--){                 //    Jump forward once after every turn
    for(i=l;l-->1;           //   Inner loop over all the moving rows
        ;a[i]=               //     After every iteration: Change the moving row to:
         a[i].endsWith("<")? //      If the current platform moves to the left:
          a[i].substring(1,t+1)
                             //       Last part of the platform
                             //        i.e. "00101<" → "0101"
          +a[i].charAt(0     //       Appended with the first character
                             //        i.e. "00101<" → '0'
            *(x-=b))         //       We are moving left, so subtract `b` from `x`      
          +"<"               //       And append the direction "<" again
                             //        so "00101<" becomes "01010<"
         :                   //      Else (the platform moves to the right):
          a[i].charAt(t)     //       Take the last character
                             //        i.e. "00111>" → '1'
          +a[i].substring(0  //       And append the first part of the platform
                             //        i.e. "00111>" → "0011"
            *(x+=b),t)       //       We are moving right, so add `b` to `x`
          +">")              //       And append the direction "<" again
                             //        so "00111>" becomes "10011>"
      b=i==y?                //    If the frog is on the current row:
         1                   //     Set `b` to 1
        :                    //    Else:
         0;                  //     Set `b` to 0
    if(x<0|x>t               //   If the Frog is out of bounds
       ||a[y].charAt(x)<49)  //   Or jumped into the water
      return 0>1;}           //    Return false
  return 1>0;}               //  If the loop ended the frog made it to the other side,
                             //  so return true
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.