একটি পলিগনের 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)
অর্থাৎ ৪ নম্বর অক্ষে রোটেশন করলে পলিগন রিসেট হবে।
সমাধান পদ্ধতি
decision_var := False, position := 0- প্রতিটি
itemininput_list:x := item[0], y := item[1]- যদি
x == 1(রোটেশন):position += y - অন্যথায় (ফ্লিপ):
position = y - position; decision_var = not decision_var
position := position % n- যদি
decision_varTrue হয়: রিটার্ন(2, position)(ফ্লিপ) - অন্যথায়: রিটার্ন
(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)