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

পাইথনে ওকিং রোবট সিমুলেশন

মান লেই একটি অনন্ত গ্রিডে একটি রোবট আছে যা (0, 0) পয়েন্ট থেকে শুরু করে। এটি উত্তর দিকের দিকে মুখ করে। এখন রোবট তিনটি টাইপের কমান্ড পেতে পারে −

  1. -2: বামে ৯০ ডিগ্রি ঘুরুন
  2. -1: ডানে ৯০ ডিগ্রি ঘুরুন
  3. ১ থেকে ৯: সামনে x ইউনিট আগে যান
  4. কিছু গ্রিড স্কয়ার আছে যেগুলো অবস্ট্রাকল।
  5. আমাদের আরেকটি অ্যারে আছে obstacles, যেটা ইন্ডিকেট করে i-তম অবস্ট্রাকল grid point (obstacles[i][0], obstacles[i][1])-এ আছে। যদি রোবট সেখানে যেতে চায়, তবে রোবট আগের গ্রিড স্কয়ারে থাকবে।

    আমাদের রোবট অরিজিন থেকে সর্বোচ্চ ইউক্লিডিয়ান ডিস্ট্যান্সের বর্গ বের করতে হবে।

    সেজন্য, যদি ইনপুট হয় commands = [4,-1,4,-2,4], obstacles = [[2,4]], তবে আউটপুট হবে ৬৫, কারণ রোবট (1, 4)-এ আটকে যাবে বামে ঘুরা এবং (1, 8)-এ যাওয়ার আগে।

    এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব −

    • position_offset := [(0, 1), (1, 0), (0, -1), (-1, 0)]
    • x, y, direction, max_distance ০ দিয়ে ইনিশিয়ালাইজ
    • প্রতিটি command commands-এ,
      • যদি command == -2 হয়, তবে
        • direction := (direction - 1) mod 4
      • অন্যথায় যদি command == -1 হয়, তবে
        • direction := (direction + 1) mod 4
      • অন্যথায়,
        • (x_off, y_off) := position_offset[direction]
      • যখন command নন-জিরো, লুপ
        • যদি (x + x_off, y + y_off) obstacles-এ না থাকে, তবে
          • x := x + x_off
          • y := y + y_off
        • command := command - 1
      • max_distance = max(max_distance, x^2 + y^2)
    • max_distance রিটার্ন

    বেস্টার বোঝার জন্য নিচের ইম্প্লিমেন্টেশন দেখুন −

    উদাহরণ

    class Solution:
        def robotSim(self, commands, obstacles):
            position_offset = [(0, 1), (1, 0), (0, -1), (-1, 0)]
            obstacles = set(map(tuple, obstacles))
            x, y, direction, max_distance = 0, 0, 0, 0
            for command in commands:
                if command == -2:
                    direction = (direction - 1) % 4
                elif command == -1:
                    direction = (direction + 1) % 4
                else:
                    x_off, y_off = position_offset[direction]
                    while command:
                        if (x + x_off, y + y_off) not in obstacles:
                            x += x_off
                            y += y_off
                        command -= 1
                    max_distance = max(max_distance, x**2 + y**2)
            return max_distance
    
    ob = Solution()
    print(ob.robotSim([4,-1,4,-2,4], [[2,4]]))

    ইনপুট

    [4,-1,4,-2,4],[[2,4]]

    আউটপুট

    65
  1. পাইথনে issuperset() ফাংশন

  2. পাইথনে SimPy ব্যবহার করে ডিসক্রিট ইভেন্ট সিমুলেশনের মৌলিক ধারণা

  3. পাইথনে আন্ডারস্কোর (_) এর ব্যবহার

  4. পাইথনে Quine প্রোগ্রাম (স্ব-প্রजनনকারী কোড)