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

পাইথনে সাব-অ্যারে আর্থমেটিক সিকোয়েন্সে রি-অ্যারেঞ্জ করা যায় কিনা চেক করার প্রোগ্রাম


মান লিজিয়ে একটি নাম্বার সিকোয়েন্স nums এবং আরেকটি দুটি অ্যারে l এবং r সাইজ m, এগুলো রেঞ্জ কোয়েরি রিপ্রেজেন্ট করে [l[i], r[i]]। আমাদের একটি বুলিয়ান সিকোয়েন্স ans বের করতে হবে, যেখানে ans[i] হবে true যদি সাব-অ্যারে nums[l[i]] ... nums[r[i]] কে রি-অ্যারেঞ্জ করে আর্থমেটিক সিকোয়েন্স বানানো যায়, অন্যথায় false।

একটি সিকোয়েন্স আর্থমেটিক বলা হয় যদি সেটিতে কমপক্ষে দুটি এলিমেন্ট থাকে এবং প্রতিটি দুটি পরপর এলিমেন্টের পার্থক্য একই থাকে। উদাহরণ: [2,4,6,8,10], [5,5,5,5], [4,-2,-8,-14] আর্থমেটিক, কিন্তু [2,2,3,6,9] নয়।

যেমন, ইনপুট হলে nums = [6,8,7,11,5,9], l = [0,0,2], r = [2,3,5], তবে আউটপুট হবে [True, False, True] কারণ:

  • কোয়েরি [0,2]: সিকোয়েন্স [6,8,7], রি-অ্যারেঞ্জ [6,7,8] - ভ্যালিড

  • কোয়েরি [0,3]: [6,8,7,11] - আর্থমেটিক নয়

  • কোয়েরি [2,5]: [7,11,5,9], রি-অ্যারেঞ্জ [5,7,9,11] - ভ্যালিড

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

  • new := [True]*len(l)

  • i = 0 থেকে len(l)-1 পর্যন্ত:

    • data := nums[l[i]:r[i]+1]

    • data.sort()

    • d := []

    • j = 0 থেকে len(data)-2 পর্যন্ত: d.append(data[j+1] - data[j])

    • d := list(set(d))

    • যদি len(d) != 1 হয়, তবে new[i] = False

  • new রিটার্ন করুন।

উদাহরণ

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

def solve(nums, l, r):
    new = [True] * len(l)
    for i in range(len(l)):
        data = nums[l[i]:r[i]+1]
        data.sort()
        d = []
        for j in range(len(data) - 1):
            d.append(data[j+1] - data[j])
        d = list(set(d))
        if len(d) != 1:
            new[i] = False
    return new

nums = [6,8,7,11,5,9]
l = [0,0,2]
r = [2,3,5]
print(solve(nums, l, r))

ইনপুট

[6,8,7,11,5,9], [0,0,2], [2,3,5]

আউটপুট

[True, False, True]

  1. পাইথনে সব রুম খোলা সম্ভব কিনা যাচাই করার প্রোগ্রাম

  2. পাইথনে স্ট্রিং ক্যারেক্টার দিয়ে kটি প্যালিনড্রোম বানানো সম্ভব কিনা চেক করা

  3. পাইথনে স্ট্রিংয়ে বাম বা ডান প্রান্তে পৌঁছানো সম্ভব কিনা যাচাই করার প্রোগ্রাম

  4. পাইথনে যেকোনো সিটি থেকে যেকোনো সিটিতে যাওয়া সম্ভব কিনা যাচাই করার প্রোগ্রাম