কম্পিউটার টিউটোরিয়াল

পাইথনে রোবট বাউন্ডেড বক্সে থাকে কিনা চেক করা

একটি রোবট (০,০) থেকে নর্থ ফেস করে শুরু করে। কমান্ড: F (ফরওয়ার্ড), L (লেফট ৯০°), R (রাইট ৯০°)। কমান্ড সিকোয়েন্স বারবার রিপিট করলে রোবট কোনো বাউন্ডেড বক্সে থাকে কিনা।

ইনপুট উদাহরণ

s = "FFRFRFFRF"

আউটপুট: True

অ্যালগরিদম

  1. ৪ বার কমান্ড সিকোয়েন্স রান করুন (কারণ ৪বার রোটেশন = ৩৬০°)।
  2. যদি ৪ বার পর (০,০) এ ফিরে আসে, তবে বাউন্ডেড।
  3. অন্যথায় আনবাউন্ডেড।

পাইথন কোড

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

ব্যাখ্যা

যদি ৪ বার রান করার পর ওরিজিনে ফিরে আসে, তবে নিশ্চিতভাবে একটি লুপে পড়েছে। অন্যথায় প্রতিটি সাইকেলে নেট ডিসপ্লেসমেন্ট থাকবে যা অসীম দূরিতায় যাবে।

  1. পাইথনে বাইনারি ট্রি সিমেট্রিক (সমমিতি) কিনা যাচাই করা

  2. পাইথনে বাইনারি ট্রি BST কিনা যাচাই করার প্রোগ্রাম

  3. পাইথনে বাইনারি ট্রি কমপ্লিট কিনা যাচাই করার প্রোগ্রাম

  4. পাইথনে গ্রাফ বাইপার্টাইট কিনা যাচাই করার প্রোগ্রাম