মনে করুন আমাদের কাছে একটি শুরুর পয়েন্ট (sx, sy), এবং টার্গেট পয়েন্ট (tx, ty) আছে। আমাদের চেক করতে হবে কি শুরুর পয়েন্ট থেকে শেষ পয়েন্টে যাওয়ার কোনো সিকোয়েন্স আছে কিনা। এখানে মুভ হল একটি পয়েন্ট (x, y) নেয়া এবং সেটিকে বা (x, x+y) বা (x+y, y)-এ রূপান্তর করা।
সুতরাং, যদি ইনপুট হয় (sx, sy) = (1,1) এবং (tx, ty) = (4,5), তবে আউটপুট হবে True, কারণ মুভ (1,1) থেকে (2,1), তারপর (3,1), তারপর (4,1), তারপর (4,5)।
এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব −
একটি solve() ফাংশন ডিফাইন করুন। এটি sx, sy, tx, ty নেবে
যদি sx > tx বা sy > ty হয়, তবে
False রিটার্ন করুন
যদি sx == tx হয়, তবে
(ty-sy) mod sx == 0 কিনা রিটার্ন করুন
যদি sy == ty হয়, তবে
(tx - sx) mod sy == 0 কিনা রিটার্ন করুন
solve(sx, sy, tx-ty, ty) বা solve(sx, sy, tx, ty-tx) রিটার্ন করুন
উদাহরণ
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন
def solve(sx, sy, tx, ty):
if sx > tx or sy > ty:
return False
if sx == tx:
return (ty-sy)%sx == 0
if sy == ty:
return (tx - sx)%sy == 0
return solve(sx, sy, tx-ty, ty) or solve(sx, sy, tx, ty-tx)
(sx, sy) = (1,1)
(tx, ty) = (4,5)
print(solve(sx, sy, tx, ty))
ইনপুট
(1,1), (4,5)
আউটপুট
True