ধরুন একটি অসীম গ্রিডে একটি রোবট রয়েছে যা বিন্দুতে (0, 0) শুরু হয়। এটি উত্তর দিকে মুখ করে আছে। এখন রোবট তিনটি সম্ভাব্য ধরনের কমান্ডের একটি গ্রহণ করতে পারে -
- -2 বাম দিকে 90 ডিগ্রি ঘুরতে
- -1 ডানদিকে 90 ডিগ্রি ঘুরতে
- x ইউনিটকে এগিয়ে যেতে 1 থেকে 9 পর্যন্ত যেকোনো মান
- কিছু গ্রিড স্কোয়ার আছে যেগুলো বাধা।
আমাদের কাছে বাধা নামে আরেকটি অ্যারে রয়েছে, এটি নির্দেশ করে যে i-তম বাধাটি গ্রিড পয়েন্টে রয়েছে (প্রতিবন্ধকতা[i][0], প্রতিবন্ধকতা[i][1]), যদি রোবট তাদের উপর যেতে চায়, রোবটটি চালু থাকে পরিবর্তে পূর্ববর্তী গ্রিড বর্গক্ষেত্র।
আমাদের সর্বাধিক ইউক্লিডীয় দূরত্বের বর্গ খুঁজে বের করতে হবে যে রোবটটি উৎপত্তি থেকে হবে।
সুতরাং, যদি ইনপুটটি কমান্ডের মত হয় =[4,-1,4,-2,4], বাধা =[[2,4]], তাহলে আউটপুট হবে 65, যেমন রোবট (1, 4) এ আটকে থাকবে ) বাম দিকে ঘুরুন এবং (1, 8) যাওয়ার আগে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- পজিশন_অফসেট :=[(0, 1),(1, 0),(0, -1),(-1, 0) ]
- x, y, দিকনির্দেশ, max_distance 0 হিসাবে শুরু করুন
- কমান্ডের প্রতিটি কমান্ডের জন্য, করুন
- যদি কমান্ড -2 এর মত হয়, তাহলে
- নির্দেশ :=(নির্দেশ - 1) মোড 4
- অন্যথায় যখন কমান্ড -1 এর মত হয়, তখন
- নির্দেশ :=(নির্দেশ + 1) মোড 4
- অন্যথায়,
- (x_off, y_off):=position_offset[direction]
- যদিও কমান্ড অ-শূন্য, do
- যদি (x + x_off, y + y_off) বাধা না থাকে, তাহলে
- x :=x + x_off
- y :=y + y_off
- command :=কমান্ড - 1
- যদি (x + x_off, y + y_off) বাধা না থাকে, তাহলে
- সর্বোচ্চ_দূরত্ব =সর্বোচ্চ_দূরত্বের সর্বোচ্চ, x^2 + y^2
- যদি কমান্ড -2 এর মত হয়, তাহলে
- সর্বোচ্চ_দূরত্ব ফেরান
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
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