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

পাইথনে পরিবারের উত্তরাধিকার ক্রম বের করার প্রোগ্রাম


মান লিজিয়ে একটি পরিবার আছে যাতে বিভিন্ন প্রজন্মের সদস্য রয়েছে। যেমন পিতা, তাঁর সন্তানরা, এবং তাদের দাদি/নানি। কিন্তু প্রতিটি পরিবারে জন্ম ও মৃত্যু ঘটে। পরিবারের বয়স্ক সদস্যকে প্রধান বিবেচনা করা হয়। তাই, যখন 'প্রধান' সদস্য মারা যান, তাঁর সরাসরি উত্তরাধিকারী বা তাদের সন্তানই প্রধান হয়। আমরা তিনটি ফাংশন ইমপ্লিমেন্ট করব: প্রথমটি যখন পরিবারে একটি শিশু জন্মে। এটি প্যারেন্টের নাম এবং শিশুর নাম ইনপুট নেয় এবং রেকর্ডে যোগ করে। দ্বিতীয় ফাংশন যখন মৃত্যু ঘটে। এটি মরনশীল সদস্যের নাম ইনপুট নেয় এবং রেকর্ড থেকে বাদ দেয়। তৃতীয় ফাংশন উত্তরাধিকার ক্রম দেয়। বর্তমান উত্তরাধিকার ক্রমটি প্রিন্ট করে যখন ডাকা হয়।

যেমন, ইনপুটের ক্রম হলে: birth, birth, birth, birth, birth, death, inheritance, death, inheritance, তবে আউটপুট হবে: ['Zach', 'Jesse', 'Ursula', 'Ryan', 'Thea'] এবং ['Jesse', 'Ursula', 'Ryan', 'Thea']।

প্রথমে পরিবারের প্রধান হল Paul। তারপর Paul-এর সন্তান হল Zach এবং Jesse। Jesse-এর তিনটি সন্তান: Ursula, Ryan, Thea (Ursula বড়, Thea ছোট)। তারপর Paul মারা যান। উত্তরাধিকার ক্রম: ['Zach', 'Jesse', 'Ursula', 'Ryan', 'Thea']। তারপর Zach মারা যান, ক্রম হয়: ['Jesse', 'Ursula', 'Ryan', 'Thea']।

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

  • family := ডিফল্টডিক্ট(লিস্ট)

  • head := বর্তমান প্রধান

  • dead := সেট

  • birth(p_name, c_name): family[p_name].append(c_name)

  • death(name): dead.add(name)

  • inheritance(): ans := [], depth_search(head), return ans

  • depth_search(current): যদি current not in dead হয়, তবে ans.append(current); প্রতিটি child in family[current] এর জন্য depth_search(child)।

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন:

from collections import defaultdict
class Solution:
    def __init__(self, head_name):
        self.family = defaultdict(list)
        self.head = head_name
        self.dead = set()
    def birth(self, p_name, c_name):
        self.family[p_name].append(c_name)
    def death(self, name):
        self.dead.add(name)
    def inheritance(self):
        self.ans = []
        self.depth_search(self.head)
        return self.ans
    def depth_search(self, current):
        if current not in self.dead:
            self.ans.append(current)
        for child in self.family[current]:
            self.depth_search(child)

ob = Solution('Paul')
ob.birth('Paul', 'Zach')
ob.birth('Paul', 'Jesse')
ob.birth('Jesse', 'Ursula')
ob.birth('Jesse', 'Ryan')
ob.birth('Jesse', 'Thea')
ob.death('Paul')
print(ob.inheritance())
ob.death('Zach')
print(ob.inheritance())

ইনপুট

ob = Solution('Paul') ob.birth('Paul', 'Zach') ob.birth('Paul', 'Jesse') ob.birth('Jesse', 'Ursula') ob.birth('Jesse', 'Ryan') ob.birth('Jesse', 'Thea') ob.death('Paul') print(ob.inheritance()) ob.death('Zach') print(ob.inheritance())

আউটপুট

['Zach', 'Jesse', 'Ursula', 'Ryan', 'Thea'] ['Jesse', 'Ursula', 'Ryan', 'Thea']

  1. পাইথনে গ্রাফ সবাই দ্বারা ট্রাভার্সেবল কিনা চেক করার প্রোগ্রাম

  2. পাইথনে কার্যকর অধ্যয়ন পদ্ধতি নির্ণয়

  3. পাইথন প্রোগ্রামে ম্যাট্রিক্সের ট্রান্সপোজ বের করা

  4. পাইথন প্রোগ্রামে অ্যারের যোগফল বের করা