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

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

একটি পলিগনের n ভের্টেক্স, n ফ্লিপিং অ্যাক্সিস এবং n রোটেশন পয়েন্ট আছে। অ্যাক্সিসের বৈশিষ্ট্য:

  • n বিজোড় হলে: প্রতিটি অ্যাক্সিস এক ভের্টেক্স এবং বিপরীত বাহুর মাঝপথ দিয়ে যায়।
  • n জোড় হলে: অর্ধেক অ্যাক্সিস বিপরীত ভের্টেক্স জোড়া এবং অর্ধেক বিপরীত বাহু জোড়া দিয়ে যায়।
  • দুটি সংলগ্ন অক্ষের কোণ ৩৬০/২n।

k-রোটেটর পলিগনকে অক্ষ k-তে ক্লকওয়াইজ (৩৬০×k)/n ডিগ্রি ঘুরায়। ইনপুট লিস্টে রোটেশন (১) বা ফ্লিপ (২) এবং অক্ষ নম্বর k থাকে। এই ট্রান্সফর্মেশনগুলো শেষে পলিগনকে প্রাথমিক অবস্থায় ফেরাতে আরেকটি অপারেশন (রোটেশন বা ফ্লিপ) যোগ করতে হবে।

উদাহরণ

ইনপুট: n = 6, input_list = [[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]]

আউটপুট: (1, 4)

অর্থাৎ ৪ নম্বর অক্ষে রোটেশন করলে পলিগন রিসেট হবে।

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

  1. decision_var := False, position := 0
  2. প্রতিটি item in input_list:
    • x := item[0], y := item[1]
    • যদি x == 1 (রোটেশন): position += y
    • অন্যথায় (ফ্লিপ): position = y - position; decision_var = not decision_var
  3. position := position % n
  4. যদি decision_var True হয়: রিটার্ন (2, position) (ফ্লিপ)
  5. অন্যথায়: রিটার্ন (1, n - position) (রোটেশন)

পাইথন ইমপ্লিমেন্টেশন

def solve(n, input_list):
    decision_var = False
    position = 0
    for item in input_list:
        x = item[0]
        y = item[1]
        if x == 1:
            position += y
        else:
            position = y - position
            decision_var = not decision_var
    position = position % n
    if decision_var:
        return (2, position)
    else:
        return (1, n - position)

# টেস্ট
print(solve(6, [[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]]))  # আউটপুট: (1, 4)

ইনপুট

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

আউটপুট

(1, 4)
  1. পাইথনে পলিগনের পরিসীমা বের করার প্রোগ্রাম

  2. পাইথনে সার্ভিস সেন্টারের সেরা পজিশন বের করার প্রোগ্রাম

  3. পাইথনে একটি পয়েন্ট পলিগনের ভিতরে বা বাউন্ডারিতে আছে কিনা চেক করার প্রোগ্রাম

  4. HP ল্যাপটপ ফ্যাক্টরি রিসেট করে ডিফল্ট স্টেটে ফেরানোর উপায়