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

পাইথনে অ্যারের রোটেশন (rotation) দিয়ে সর্ট করা সম্ভব কিনা তা যাচাই করা

মান লিজিয়ে আমাদের একটি সংখ্যা লিস্ট nums আছে, আমাদের যাচাই করতে হবে রোটেশন (rotation) ব্যবহার করে nums সর্ট করা সম্ভব কিনা। রোটেশনে আমরা nums-এর শেষ থেকে কিছু কন্টিগুয়াস এলিমেন্ট শিফট করে অ্যারের সামনে রাখতে পারি।

যেমন, ইনপুট যদি nums = [4,5,6,1,2,3] হয়, তবে আউটপুট হবে True কারণ শেষ তিনটি এলিমেন্ট রোটেট করে সামনে আনলে সর্ট হয়ে যায়।

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

  • n := nums-এর সাইজ
  • যদি nums সর্টেড হয়, তবে:
    • True রিটার্ন করুন
  • অন্যথায়:
    • status := True
    • i ০ থেকে n - 2 পর্যন্ত, করুন:
      • যদি nums[i] > nums[i + 1] হয়, তবে:
        • লুপ থেকে বের হোন
    • i := i + 1
    • k i থেকে n - 2 পর্যন্ত, করুন:
      • যদি nums[k] > nums[k + 1] হয়, তবে:
        • status := False
        • লুপ থেকে বের হোন
    • যদি status মিথ্যা (false) হয়, তবে:
      • False রিটার্ন করুন
    • অন্যথায়:
      • যদি nums[n - 1] <= nums[0] হয়, তবে:
        • True রিটার্ন করুন
      • False রিটার্ন করুন

উদাহরণ

বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন:

def solve(nums):
    n = len(nums)
    if all(nums[i] <= nums[i + 1] for i in range(len(nums) - 1)):
        return True
    else:
        status = True
        for i in range(n - 1):
            if nums[i] > nums[i + 1]:
                break
        i += 1
        for k in range(i, n - 1):
            if nums[k] > nums[k + 1]:
                status = False
                break
        if not status:
            return False
        else:
            if nums[n - 1] <= nums[0]:
                return True
            return False

nums = [4,5,6,1,2,3]
print(solve(nums))

ইনপুট

[4,5,6,1,2,3]

আউটপুট

True
  1. অ্যারে (লিস্ট) ডিসেন্ডিং অর্ডারে সর্ট করার পাইথন প্রোগ্রাম

  2. অ্যারে (লিস্ট) অ্যাসেন্ডিং অর্ডারে সর্ট করার পাইথন প্রোগ্রাম

  3. পাইথনে শর্তসাপেক্ষ এডজেসেন্ট সোয়্যাপিং (conditional adjacent swapping) দিয়ে অ্যারে সর্ট করা সম্ভব কিনা তা যাচাই করা

  4. পাইথনে ভেক্টর A-কে রোটেট এবং ভেক্টর C যোগ করে ভেক্টর B-তে পৌঁছানো সম্ভব কিনা তা যাচাই করা