ধরুন আমাদের একটি স্ট্রিং s আছে, যা একটি রোবটের চালকে প্রতিনিধিত্ব করে। রোবট বর্তমানে (0, 0) অবস্থানে রয়েছে এবং এটি উত্তর দিকে মুখ করে আছে। সরানো স্ট্রিং-এ এই অক্ষর থাকতে পারে
- "F" দিক এগিয়ে যেতে, এক ইউনিট
- "L" 90 ডিগ্রি’ বামে ঘোরানোর জন্য
- "R" 90 ডিগ্রি’ ডানদিকে ঘোরানোর জন্য
তাই রোবট যদি বারবার s-এর ক্রমানুসারে চলে, তাহলে আমাদের পরীক্ষা করতে হবে প্লেনে এমন কিছু বাক্স আছে যেটা থেকে রোবট কখনও চলে যায় না।
সুতরাং, যদি ইনপুটটি s ="FFRFRFFRF" এর মত হয়, তাহলে আউটপুট হবে True, কারণ রোবট 2 ইউনিট উত্তর দিকে নিয়ে যায়। তারপর 90 ডানদিকে ঘুরুন এবং একটি ব্লক সরান, তারপর আবার 90 ডিগ্রি ডানদিকে ঘোরান এবং 2 ইউনিট দক্ষিণে তারপর আবার ডানদিকে সরান, তাই এটি একটি বাক্স তৈরি করছে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- মুভস :=একটি অ্যারে যেখানে দিকনির্দেশ রয়েছে [[0, -1], [1, 0], [0, 1], [-1, 0]]
- r, c :=0, 0
- d :=0
- 0 থেকে 3 রেঞ্জের জন্য, করুন
- 0 থেকে s আকারের রেঞ্জের জন্য,
- করুন
- যদি s[i] "F" এর মত হয়, তাহলে
- (r, c) :=(r + moves[d, 0], c + moves[d, 1])
- অন্যথায় যখন s[i] "L" এর মত হয়, তখন
- d :=(d + 3) মোড 4
- অন্যথায় যখন s[i] "R" এর মত হয়, তখন
- d :=(d + 1) মোড 4
- যদি s[i] "F" এর মত হয়, তাহলে
- যদি r 0 এর মত হয় এবং c 0 এর মত হয়, তাহলে
- সত্য ফেরান
- 0 থেকে s আকারের রেঞ্জের জন্য,
- মিথ্যে ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(s): moves = [[0, -1], [1, 0], [0, 1], [-1, 0]] r, c = 0, 0 d = 0 for times in range(4): for i in range(len(s)): if s[i] == "F": r, c = r + moves[d][0], c + moves[d][1] elif s[i] == "L": d = (d + 3) % 4 elif s[i] == "R": d = (d + 1) % 4 if r == 0 and c == 0: return True return False s = "FFRFRFFRF" print(solve(s))
ইনপুট
"FFRFRFFRF"
আউটপুট
True