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

পাইথনে লাস্ট ইনডেক্সে পৌঁছানোর ন্যূনতম স্টেপ বের করার প্রোগ্রাম (জাম্প গেম ভেরিয়েন্ট)


মান লক্ষ্য করুন আমাদের কাছে একটি সংখ্যার তালিকা nums আছে এবং আমরা বর্তমানে nums[0]-এ আছি। প্রতিটি স্টেপে আমরা বর্তমান ইনডেক্স i থেকে i+1 বা i-1 বা j (যেখানে nums[i] == nums[j]) এ জাম্প করতে পারি। আমাদের কাজ হল ফাইনাল ইনডেক্সে পৌঁছানোর ন্যূনতম স্টেপ সংখ্যা বের করা।

উদাহরণস্বরূপ, যদি ইনপুট হয় nums = [4, 8, 8, 5, 4, 6, 5], তবে আউটপুট হবে 3, কারণ আমরা ইনডেক্স ০ থেকে ৪ এ জাম্প করতে পারি (দুটির মান ৪)। তারপর ইনডেক্স ৩ এ ফিরে যাই। তারপর ইনডেক্স ৩ থেকে ৬ এ জাম্প করতে পারি (দুটির মান ৫)।

সমাধানের ধাপসমূহ:
  • pos := defaultdict(list) (ইনডেক্স স্টোর করার ম্যাপ)
  • প্রতিটি ইনডেক্স i এবং ভ্যালু n এর জন্য nums-এ:
    • i কে pos[n]-র শেষে ঢুকান।
  • n := len(nums)
  • visited := [False] * n, visited[0] := True
  • q := deque([(0, 0)]) (BFS কিউ)
  • q খালি না হওয়া পর্যন্ত লুপ চালান:
    • (u, d) := q.popleft()
    • যদি u == n-1 হয়, তবে d রিটার্ন করুন।
    • pos[nums[u]] + [u-1, u+1] এর প্রতিটি v এর জন্য:
      • যদি 0 <= v < n এবং not visited[v] হয়, তবে:
        • visited[v] := True
        • q.append((v, d+1))
    • del pos[nums[u]] (ভিজিটেড ভ্যালুর ইনডেক্স লিস্ট ডিলিট করে রিডান্ডেন্সি কমাতে)
উদাহরণ কোড
class Solution:
    def solve(self, nums):
        from collections import defaultdict, deque
        pos = defaultdict(list)
        for i, n in enumerate(nums):
            pos[n].append(i)
        q = deque([(0, 0)])
        n = len(nums)
        visited = [False] * n
        visited[0] = True
        while q:
            u, d = q.popleft()
            if u == n - 1:
                return d
            for v in pos[nums[u]] + [u - 1, u + 1]:
                if 0 <= v < n and not visited[v]:
                    visited[v] = True
                    q.append((v, d + 1))
            del pos[nums[u]]
        return -1

ob = Solution()
nums = [4, 8, 8, 5, 4, 6, 5]
print(ob.solve(nums))
ইনপুট
[4, 8, 8, 5, 4, 6, 5]
আউটপুট
3
  1. পাইথনে রঙ মার্জ করলে অবশিষ্ট ন্যূনতম রঙের সংখ্যা বের করার প্রোগ্রাম

  2. পাইথনে ৮-পাজল সমাধানের জন্য প্রয়োজনীয় ধাপের সংখ্যা খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে শতর্ঞ্জের ঘোড়া (knight) দিয়ে টার্গেট পজিশনে যেতে ন্যূনতম স্টেপ বের করার প্রোগ্রাম

  4. পাইথনে একটি সংখ্যার গুণনীয়গুলোর ন্যূনতম যোগফল বের করার প্রোগ্রাম