একটি রোবট (০,০) থেকে নর্থ ফেস করে শুরু করে। কমান্ড: F (ফরওয়ার্ড), L (লেফট ৯০°), R (রাইট ৯০°)। কমান্ড সিকোয়েন্স বারবার রিপিট করলে রোবট কোনো বাউন্ডেড বক্সে থাকে কিনা।
ইনপুট উদাহরণ
s = "FFRFRFFRF"
আউটপুট: True
অ্যালগরিদম
- ৪ বার কমান্ড সিকোয়েন্স রান করুন (কারণ ৪বার রোটেশন = ৩৬০°)।
- যদি ৪ বার পর (০,০) এ ফিরে আসে, তবে বাউন্ডেড।
- অন্যথায় আনবাউন্ডেড।
পাইথন কোড
def solve(s):
moves = [[0, -1], [1, 0], [0, 1], [-1, 0]] # N, E, S, W
r, c = 0, 0
d = 0 # 0=N, 1=E, 2=S, 3=W
for _ in range(4):
for ch in s:
if ch == "F":
r, c = r + moves[d][0], c + moves[d][1]
elif ch == "L":
d = (d + 3) % 4
elif ch == "R":
d = (d + 1) % 4
if r == 0 and c == 0:
return True
return False
# টেস্ট
print(solve("FFRFRFFRF")) # True
ব্যাখ্যা
যদি ৪ বার রান করার পর ওরিজিনে ফিরে আসে, তবে নিশ্চিতভাবে একটি লুপে পড়েছে। অন্যথায় প্রতিটি সাইকেলে নেট ডিসপ্লেসমেন্ট থাকবে যা অসীম দূরিতায় যাবে।