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

পাইথনে প্রাণীদের চূড়ান্ত অবস্থান নির্ণয় যখন সেগুলো থেমে যায়

ধরুন, s একটি স্ট্রিং যা প্রাণীদের প্রাথমিক অবস্থা নির্দেশ করে। প্রতিটি প্রাণী তিনটি মানের একটি হতে পারে: L (বামে চলছে), R (ডানে চলছে), @ (স্থির)। যেসব প্রাণী এক দিকে চলছে সেগুলো অন্যদিক থেকে বল পেলে থেমে যায় এবং @ 상태로 রূপান্তরিত হয়। আমাদের কাজ হল সমস্ত প্রাণী থেমে গেলে তাদের চূড়ান্ত অভিমুখ জানা।

উদাহরণ: s = "@@L@R@@@@L" হলে আউটপুট "LLL@RRRLLL"।

সমাধানের ধাপসমূহ

  • levels := s দৈর্ঘ্যের তালিকা -1 দিয়ে পূরণ
  • q := ডবল-এন্ডেড কিউ
  • s এর প্রতিটি সূচকের জন্য যদি 'R' বা 'L' পাওয়া যায় তবে (idx, 0, dir) কিউতে পুশ করুন
  • l := s-এর অক্ষর তালিকা
  • যব तक q খালি না হয়:
    • (idx, new_level, dir) := কিউ থেকে পপ
    • যদি levels[idx] == -1 হয়:
      • levels[idx] := new_level; l[idx] := dir
      • যদি dir == 'R' এবং idx+1 < len(l) হয় তবে (idx+1, new_level+1, dir) পুশ করুন
      • অন্যথায় যদি dir == 'L' এবং idx-1 >= 0 হয় তবে (idx-1, new_level+1, dir) পুশ করুন
    • অন্যথায় যদি levels[idx] == new_level হয় এবং l[idx] != dir হয় তবে l[idx] := '@'
  • l-এর অক্ষরগুলো জোড়া দিয়ে স্ট্রিং ফেরত দিন

উদাহরণ কোড

from collections import deque
class Solution:
    def solve(self, s):
        levels = [-1 for i in s]
        q = deque()
        for idx in range(len(s)):
            if s[idx] == "R" or s[idx] == "L":
                q.append((idx, 0, s[idx]))
        l = list(s)
        while q:
            idx, new_level, dir = q.popleft()
            if levels[idx] == -1:
                levels[idx] = new_level
                l[idx] = dir
                if dir == "R" and idx + 1 < len(l):
                    q.append((idx + 1, new_level + 1, dir))
                elif dir == "L" and idx - 1 >= 0:
                    q.append((idx - 1, new_level + 1, dir))
            elif levels[idx] == new_level:
                if l[idx] != dir:
                    l[idx] = "@"
        return "".join(l)

ob = Solution()
s = "@@L@R@@@@L"
print(ob.solve(s))

ইনপুট

"@@L@R@@@@L"

আউটপুট

LLL@RRRLLL
  1. Python-এ জাম্প করেও পজিশন n-এ পৌঁছানো সম্ভব কিনা সেটা চেক করার প্রোগ্রাম

  2. পাইথনে পলিগনকে প্রাথমিক অবস্থায় ফেরাতে রোটেশন/ফ্লিপ যোগ করা

  3. পাইথনে স্ট্রিংর size r পারমুটেশন বের করার প্রোগ্রাম

  4. Python-এ সর্বোচ্চ বিল্ডিং হাইট বের করার প্রোগ্রাম