বাচ্চাদের জন্য রোবট নিয়ে বাজানো - আমি কোন চিঠি পৌঁছে যাব?


12

টিএল; ডিআর: অ্যারের শুরুতে অবস্থানের একটি অ্যারে এবং একটি রোবট দেওয়া, আন্দোলনের সাথে স্ট্রিং পড়ার চেয়ে একটি অ্যালগরিদম লিখুন ( F"এগিয়ে যান", R"90 ডিগ্রী ডানদিকে ঘোরান" এবং L"90 ডিগ্রি ঘোরানোর জন্য" বাম ") এবং রোবটের শেষ অবস্থান গণনা করুন। সম্পূর্ণ লেখায় আরও বিশদ।

আমাদের বাড়িতে বাচ্চাদের জন্য একটি খুব সহজ প্রোগ্রামেবল ডিভাইস রয়েছে: গাড়িটি এগিয়ে যেতে, 90 ডিগ্রি বাম দিকে ঘুরুন বা 90 ডিগ্রি ডানদিকে ঘুরান বাটনগুলি সহ একটি ছোট গাড়ি। এর মতো কিছু:

মাউস গাড়ি

আমাদের কাছে এই জাতীয় অক্ষর সহ একটি ফেনা মাদুর রয়েছে:

খেলছেন মাদুর

এই সমস্ত কিছুর উদ্দেশ্য হ'ল বাচ্চাদের বর্ণমালা এবং প্রোগ্রামিংয়ের অধ্যয়ন উভয়কে এক সাথে শেখানো।

চ্যালেঞ্জ

মনে করুন আমরা এলোমেলোভাবে আমাদের ফেনা মাদুরটি সাজিয়ে রেখেছি:

+---+---+---+---+---+---+---+
| E | R | L | B | I | X | N |
+---+---+---+---+---+---+---+
| O | A | Q | Y | C | T | G |
+---+---+---+---+---+---+---+
| F | W | H | P | D | Z | S |
+---+---+---+---+---+---+---+
    | K | V | U | M | J |   
    +---+---+---+---+---+
            |   |
            +---+

মনে করুন আমরাও গাড়িটি সংশোধন করেছি যাতে আমরা যখন "এগিয়ে যাও" কমান্ড প্রোগ্রাম করি তখন গাড়িটি মাদুরের এক বর্গক্ষেত্রের ঠিক আকারে এগিয়ে যায়। সুতরাং, যানবাহনটি যদি Uস্কোয়ারে থাকে এবং উত্তর দিকে যায় তবে এটি ঠিক Pস্কোয়ারে থামে ।

যানবাহনটি চলতে শুরু করার আগে নির্দেশাবলী সমস্ত দেওয়া হয় এবং সেগুলি হল:

  • F: গাড়িটি পাশের স্কোয়ারের দিকে এগিয়ে যায়।
  • R: যানবাহনটি 90 ডিগ্রি ঠিক তার জায়গায় পরিণত হয় (আর কোনও গতিবিধি নেই)।
  • L: যানবাহনটি তার জায়গায় 90 ডিগ্রি রেখে গেছে (আর কোনও গতিবিধি নেই)।

একবার নির্দেশনা দেওয়া হয়ে গেলে, আপনি "জিও" বোতাম টিপুন এবং যানটিকে একটি নির্দিষ্ট অবস্থানে পাঠাতে পারেন কারণ এটি প্রদত্ত ক্রমের প্রতিটি নির্দেশ অনুসরণ করবে। সুতরাং, আপনি বাচ্চাকে গাড়ীর কোনও নির্দিষ্ট চিঠিতে যাওয়ার জন্য প্রয়োজনীয় নির্দেশাবলী সন্নিবেশ করতে বলতে পারেন।

আপনাকে অবশ্যই সংক্ষিপ্ততম প্রোগ্রাম / ফাংশন লিখতে হবে stringযা নির্দেশাবলীর একটি সেট সহ একটি (ইনপুট প্যারামিটার) প্রসেস করে এবং যানটি যে চিঠিটি (আউটপুট string) থামিয়ে দেয় তার গণনা করে ।

বিবরণ:

  • যানটি সর্বদা নীচে ফাঁকা স্কোয়ার থেকে শুরু হয়ে উত্তর দিকে ( Uবর্গাকার দিকে ) মুখোমুখি হয় ।
  • ইনপুট স্ট্রিং শুধুমাত্র অক্ষর থাকতে হবে F, R, Lএবং G( "যান" বাটন জন্য)। আপনি যদি পছন্দ করেন তবে মাদুর এবং নির্দেশাবলীর জন্য ছোট হাতের অক্ষর ব্যবহার করতে পারেন।
  • অ্যালগরিদমকে প্রথমটির আগে স্ট্রিংয়ের প্রতিটি নির্দেশ মানতে হবে G(তার পরে প্রতিটি নির্দেশ যানবাহন চলতে শুরু করার সাথে সাথে উপেক্ষা করা হবে)।
  • যদি কোনও নির্দিষ্ট মুহুর্তে যানটি মাদুরের বাইরে চলে যায় (এমনকি ইনপুট স্ট্রিংটি পুরোপুরি প্রক্রিয়াজাত নাও করা হয়) তবে অ্যালগরিদমকে অবশ্যই স্ট্রিংটি ফিরে আসতে হবে Out of mat
  • যদি তা না হয় তবে অ্যালগোরিদমকে অবশ্যই গাড়িটি থামানো চিঠিটি ফিরিয়ে দিতে হবে। প্রারম্ভিক পয়েন্টটি একটি চর হিসাবে গণনা করা হয় (বা একটি খালি স্ট্রিং)।

উদাহরণ:

Input: FFG
Output: P

Input: FRFRFG
Output: Out of mat

Input: RRFFG
Output: Out of mat

Input: FFFRFFLFG
Output: X

Input: FFFRFFLF
Output:      <-- Nothing or a whitespace (the robot has not started moving)

Input: FFFRRFFFG
Output:      <-- Nothing or a whitespace (the robot has returned to the starting point)

Input: RRRRRLFFFLFFRFRFGFFRRGRFF
Output: L    (Everything after the first G is ignored)

এটি , তাই প্রতিটি ভাষার জন্য সংক্ষিপ্ততম প্রোগ্রামটি জয় পেতে পারে!


1
পরবর্তী জিনিস: একই জিনিস, তবে স্ট্রিং ইনপুট হিসাবে মাদুর কনফিগারেশন সহ, মাদুরের @প্রারম্ভিক অবস্থান এবং স্পেসগুলি বন্ধ থাকার কারণে, এই কনফিগারটিটি হবে ERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @(বিভিন্ন ফাঁক দিয়ে, এসই এতে
স্টিফেন

উত্তর:


3

জাভাস্ক্রিপ্ট (ES6), 194 176 169 163 বাইট

@ লুক এবং @ আরনল্ডকে ধন্যবাদ দিয়ে কিছু বাইট সংরক্ষণ করা হয়েছে।

s=>(p=35,d=3,t='ERLBIXN1OAQYCTG1FWHPDZS11KVUMJ11111 11',[...s].every(i=>i=='L'?d--:i>'Q'?d++:i<'G'?+t[p+=[1,8,-1,-8][d%4]]||!t[p]?p=1/0:p:0)?'':t[p]||'Out of mat')

Ungolfed:

s=>(
  p=35,
  d=3,
  t='ERLBIXN1OAQYCTG1FWHPDZS11KVUMJ11111 11',
  [...s].every(i=>i=='L'?d--:
                  i<'Q'?d++:
                  i<'G'?+t[p+=[1,8,-1,-8][d%4]]||!t[p]?p=1/0:p:
                  0
              )?'':
               t[p]||'Out of mat'
)

f=
s=>(p=35,d=3,t='ERLBIXN1OAQYCTG1FWHPDZS11KVUMJ11111 11',[...s].every(i=>i=='L'?d--:i>'Q'?d++:i<'G'?+t[p+=[1,8,-1,-8][d%4]]||!t[p]?p=1/0:p:0)?'':t[p]||'Out of mat')

console.log(f('FFG')); //P
console.log(f('FRFRFG')); //Out of mat
console.log(f('RRFFG')); //Out of mat
console.log(f('FFFRFFLFG')); //X
console.log(f('FFFRFFLF')); //(space)
console.log(f('FFFRRFFFG')); //(space)
console.log(f('RRRRRLFFFLFFRFRFGFFRRGRFF')); //L
console.log(f('FFFFFRRFG')); //Out of mat


1
আপনি প্রতিস্থাপন 3 বাইট সংরক্ষণ করতে পারবেন falseসঙ্গে!1
লুক

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

165 বাইটের জন্য এখানে একটি সমাধান রয়েছে:(s,p=35,d=3,t='ERLBIXN1OAQYCTG1FWHPDZS11KVUMJ11111 11')=>[...s].every(i=>i=='L'?d--:i=='R'?d++:i=='F'?+t[p+=[1,8,-1,-8][d%4]]||!t[p]?p=1/0:1:0)?'':t[p]||'Out of mat'
লুক

কীভাবে এটি আমাকে 165 বাইট (?) এ পৌঁছেছে তা নিশ্চিত নয় তবে [1,8,-1,-8]অ্যারের জন্য আমার অবশ্যই আলাদা ভেরিয়েবলের দরকার নেই , ধন্যবাদ!
রিক হিচকক

ওফস, অবশ্যই ভুল হিসাব করা উচিত, এটি 171 I আপনার প্রয়োজন নেই এমন একটি স্থানও আমি সরিয়েছি, যা এখনও বর্তমান উত্তরে রয়েছে (এটি শেষ স্থান)।
লুক


2

পাইথন 3 , 226 231 241 বাইট

দ্বিতীয় সম্পাদনা; এখন কাজ করা উচিত। আবার, প্রচুর অপ্টিমাইজেশন করতে হবে।

n=input();s="0ERLBIXN00OAQYCTG00FWHPDZS000KVUMJ000000 00000";d=1;c=40;i=0;w=[-1,-9,1,9]
while n[i]!="G"and c>=0:
 if n[i]=="F":c+=w[d]
 else:d=[d+[-1,3][d<0],-~d%4][n[i]=="R"]
 i+=1
print(["Out of mat",s[c]][c in range(len(s))and s[c]!="0"])

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


0

ওল্ফ্রাম ভাষা / গণিত, 300 বাইট

p=Re[(1-7I)#[[1]]]&;d=Drop;t=Throw;s=Switch;s[#,0,"Out of mat",_,StringPart["000 0000KVUMJ0FWHPDZSOAQYCTGERLBIXN",p@#]]&@Catch@Fold[If[MemberQ[d[d[Range[4,35],{2,5}],{7}],p@#],#,t@0]&@(s[#2,"F",#+{#[[2]],0},"R",#{1,-I},"L",#{1,I},_,t[#]]&)[#1,#2]&,{4,I},If[StringFreeQ["G"]@#,{"G"},Characters@#]&@#]&

Ungolfed:

p = Re[(1 - 7 I) #[[1]]] &;
d = Drop;
t = Throw;
s = Switch;
s[#,
    0, "Out of mat",
    _, StringPart["000 0000KVUMJ0FWHPDZSOAQYCTGERLBIXN", p@#]] &@
  Catch@
  Fold[
    If[MemberQ[d[d[Range[4, 35], {2, 5}], {7}], p@#], #, 
        t@0] &@(s[#2, "F", # + {#[[2]], 0}, "R", # {1, -I}, 
          "L", # {1, I}, _, t[#]] &)[#1, #2] &,
    {4, I},
    If[StringFreeQ["G"]@#, {"G"}, Characters@#] &@#] &
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.