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

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

মান লিজিয়ে আমাদের ২D প্লেনে তিনটি ভেক্টর x, y এবং z আছে। আমাদের যাচাই করতে হবে ভেক্টর x-কে ৯০ ডিগ্রি (ক্লকওয়াইজ) রোটেট করে বা ভেক্টর z যোগ করে যতবার দরকার ততবার করে ভেক্টর y পাওয়া যায় কিনা।

যেমন, ইনপুট যদি x = (-4, -2), y = (-1, 2), z = (-2, -1) হয়, তবে আউটপুট হবে True কারণ আমরা z-কে x-এর সাথে যোগ করলে লোকেশন পাব (-2, -1), তারপর ৯০° ক্লকওয়াইজ রোটেট করলে (-1, 2) পাব।

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

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

util() ফাংশন সংজ্ঞায়িত করুন। এটি p, q, r, s নেবে

  • d := r * r + s * s
  • যদি d ০ সমান হয়, তবে:
    • true রিটার্ন করুন যখন p এবং q দুটোই ০, অন্যথায় false
  • true রিটার্ন করুন যখন (p * r + q * s) এবং (q * r - p * s) দুটোই d দ্বারা বিভাজ্য, অন্যথায় false
  • মূল মেথড থেকে নিচের কাজ করুন:
    • যদি নিচের যেকোনো একটিই সত্য হয়:
      • util(x_p - x_q, y_p - y_q, x_r, y_r)
      • util(x_p + x_q, y_p + y_q, x_r, y_r)
      • util(x_p - y_q, y_p + x_q, x_r, y_r)
      • util(x_p + y_q, y_p - x_q, x_r, y_r)
      তবে True রিটার্ন করুন
    • False রিটার্ন করুন

উদাহরণ

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

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
  1. পাইথনে একটি সংখ্যা এবং তার ট্রিপল খুঁজুন

  2. পাইথনে ৩ ও ৭ এর গুণিতকের যোগফল দিয়ে সংখ্যা তৈরি করা সম্ভব কিনা

  3. পাইথনে isprintable() মেথড এবং এর অ্যাপ্লিকেশন

  4. পাইথনে divmod() এবং এর অ্যাপ্লিকেশন