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

পাইথনে জাম্প গেমে সর্বোচ্চ স্কোর বের করার প্রোগ্রাম


মনে করুন nums নামক একটি অ্যারে এবং অন্য একটি মান k আছে। আমরা ইনডেক্স ০-এ আছি। এক মুভে আমরা høj丽 হইতে høj丽 ডানে k ধাপ জাম্প করতে পারি অ্যারির বাউন্ডের বাইরে যাবে না। আমরা অ্যারির শেষ ইনডেক্সে পৌঁছাতে চাই। জাম্প করার জন্য স্কোর मिलে, যা হলো আমরা যেসব ইনডেক্স j ভিজিট করেছি সেগুলোর nums[j] যোগফল। সর্বোচ্চ স্কোর বের করতে হবে।

যেমন, ইনপুট nums = [1,-2,-5,7,-6,4], k = 2 হলে, আউটপুট হবে ১০ কারণ, আমরা এই সিকোয়েন্সে জাম্প করি [1, -2, 7, 4], তাহলে সর্বোচ্চ পয়েন্ট পাই, যা ১০।

সমাধান পদ্ধতি

এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:

  • n := nums-এর সাইজ
  • scores := 0 দিয়ে n সাইজের একটি অ্যারে
  • scores[0] := nums[0]
  • currMax := scores[0], max_pt := 0
  • যদি n < 1 হয়, তবে
    • 0 রিটার্ন করুন
  • যদি n == 1 হয়, তবে
    • nums-এর শেষ এলিমেন্ট রিটার্ন করুন
  • idx = 1 থেকে n-1 পর্যন্ত
    • যদি max_pt >= idx - k হয়, তবে
      • যদি currMax < scores[idx-1] এবং idx > 0 হয়, তবে
        • currMax := scores[idx-1], max_pt := idx-1
    • অন্যথায়,
      • যদি idx - k > 0 হয়, তবে
        • currMax := scores[idx-k], max_pt := idx - k
        • p = idx-k থেকে idx-1 পর্যন্ত
          • যদি scores[p] >= currMax হয়, তবে
            • max_pt := p, currMax := scores[p]
    • scores[idx] := currMax + nums[idx]
  • scores[-1] := currMax + nums[-1]
  • scores[-1] রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বোঝার জন্য:

 def solve(nums, k):    n = len(nums)    scores = [0] * n    scores[0] = nums[0]    currMax = scores[0]    max_pt = 0    if n < 1:       return 0    if n == 1:       return nums[-1]    for idx in range(1,n):       if max_pt >= idx - k:          if currMax < scores[idx-1] and idx > 0:             currMax = scores[idx-1]             max_pt = idx-1       else:          if idx - k > 0:             currMax = scores[idx-k]             max_pt = idx - k             for p in range(idx-k, idx):                if scores[p] >= currMax:                   max_pt = p                   currMax = scores[p]       scores[idx] = currMax + nums[idx]    scores[-1] = currMax + nums[-1]    return scores[-1] nums = [1,-2,-5,7,-6,4] k = 2 print(solve(nums, k))

ইনপুট

[1,-2,-5,7,-6,4], 2 

আউটপুট

10

  1. পাইথনে ন্যাপস্যাক সমস্যায় একাধিক কপি নিয়ে সর্বোচ্চ মান খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে ২ডি ম্যাট্রিক্সে ডান ও নিচে চলা সীমাবদ্ধ রেখে সর্বোচ্চ কয়েন সংগ্রহ করার প্রোগ্রাম

  3. পাইথনে স্টক মার্কেটে একাধিকবার কেনা-বেচা করে সর্বাধিক লাভ বের করার প্রোগ্রাম

  4. পাইথনে স্টক মার্কেটে একবার কেনা-বেচা করে সর্বাধিক লাভ বের করার প্রোগ্রাম