मान लीजिए हमारे पास 2D प्लेन में तीन वेक्टर x, y और z हैं। हमें यह जांचना है कि क्या हम वेक्टर x को 90 डिग्री (घड़ी की दिशा में) घुमाकर या आवश्यकतानुसार कई बार z को जोड़कर वेक्टर y प्राप्त कर सकते हैं।
तो, यदि इनपुट x = (-4, -2), y = (-1, 2), z = (-2, -1) है, तो आउटपुट True होगा क्योंकि हम x में z जोड़कर स्थान (-2, -1) प्राप्त कर सकते हैं, फिर 90° घड़ी की दिशा में घुमाकर (-1, 2) प्राप्त कर सकते हैं।

हल करने के चरण
util() फ़ंक्शन परिभाषित करें। यह p, q, r, s लेगा
- d := r * r + s * s
- यदि d, 0 के समान है, तो:
- true लौटाएं जब p और q दोनों 0 हों, अन्यथा false
- true लौटाएं जब (p * r + q * s) और (q * r - p * s) दोनों d से विभाज्य हों, अन्यथा false
- मुख्य विधि से निम्नलिखित करें:
- यदि util(x of p - x of q, y of p - y of q, x of r, y of r) या util(x of p + x of q, y of p + q[1], x of r, y of r) या util(x of p - y of q, y of p + x of q, x of r, y of r) या util(x of p + y of q, y of p - x of q, x of r, y of r) में से कोई भी true है, तो:
- True लौटाएं
- False लौटाएं
- यदि util(x of p - x of q, y of p - y of q, x of r, y of r) या util(x of p + x of q, y of p + q[1], x of r, y of r) या util(x of p - y of q, y of p + x of q, x of r, y of r) या util(x of p + y of q, y of p - x of q, x of r, y of r) में से कोई भी true है, तो:
उदाहरण
def util(p, q, r, s):
d = r * r + s * s
if d == 0:
return p == 0 and q == 0
return (p * r + q * s) % d == 0 and (q * r - p * s) % d == 0
def solve(p,q,r):
if util(p[0] - q[0], p[1] - q[1], r[0], r[1]) or util(p[0] + q[0], p[1] + q[1], r[0], r[1]) or util(p[0] - q[1], p[1] + q[0], r[0], r[1]) or util(p[0] + q[1], p[1] - q[0], r[0], r[1]):
return True
return False
p = (-4, -2)
q = (-1, 2)
r = (-2, -1)
print(solve(p, q, r))
इनपुट
(-4, -2), (-1, 2), (-2, -1)
आउटपुट
True