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

পাইথনে রিং-এ A ও B-র দূরত্বের ন্যূনতম যোগফল নির্ণয়

১ থেকে N সংখ্যāvाले একটি রিং (ring) দেওয়া আছে। রিং-এ দুটি পয়েন্ট A এবং B আছে। আমরা যেকোনো পয়েন্ট X-এ দাঁড়াতে পারি। লক্ষ্য হলো X কে এমনভাবে বেছে নেওয়া যাতে Z = distance(X, A) + distance(X, B) ন্যূনতম হয়। শর্ত হলো X, A এবং B-র সাথে সমান হবেনা। ন্যূনতম Z মান ফেরত দিতে হবে।

উদাহরণ

ইনপুট: N = 30, A = 10, B = 20

আউটপুট: 10 (X = 15 হলে distance(15,10)=5, distance(15,20)=5, যোগফল=10)

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

  1. যদি A > B হয়, তবে সিপ্প করুন।
  2. ঘড়ির পর্যায়ে (clockwise) দূরত্ব = B - A
  3. ঘড়ির বিপরীত পর্যায়ে (counter-clockwise) দূরত্ব = (A - 1) + (N - B + 1)
  4. এই দুটির মধ্যে ন্যূনতম দূরত্ব বের করুন।
  5. যদি ন্যূনতম দূরত্ব ১ হয়, তবে ৩ ফেরত দিন (কারণ X, A বা B হতে পারবে না)।
  6. অন্যথায় ন্যূনতম দূরত্ব ফেরত দিন।

পাইথন কোড

def get_min_z(n, a, b):
    if a > b:
        a, b = b, a
    clock_wise_dist = b - a
    counter_clock_wise_dist = (a - 1) + (n - b + 1)
    minimum_dist = min(clock_wise_dist, counter_clock_wise_dist)
    if minimum_dist == 1:
        return 3
    return minimum_dist

n = 30
a = 10
b = 20
print(get_min_z(n, a, b))

ইনপুট

30, 10, 20

আউটপুট

10
  1. পাইথনে ট্রি থেকে একটি এজ কাট করে দুটি সাবট্রিের নোড ভ্যালু সামের পার্থক্য মিনিমাইজ করা

  2. পাইথনে গ্রাফে সর্বোচ্চ ক্লিকের ন্যূনতম আকার বের করার প্রোগ্রাম

  3. পাইথন প্রোগ্রামে অ্যারের যোগফল বের করা

  4. পাইথনে অ্যারের যোগফল বের করা