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

পাইথনে دو মুদ্রার কনভার্সন রেট বের করা

তিনটি অ্যারে curr_a, curr_b, conv_rate দিয়ে মুদ্রা কনভার্সন রেট দেওয়া থাকে। সোর্স থেকে ডেস্টিনেশন মুদ্রার কনভার্সন রেট বের করুন। পাথ না থাকলে ০ রিটার্ন করুন।

ইনপুট উদাহরণ

src = "INR", dest = "JPY"
curr_a = ["INR", "GBP", "EUR"]
curr_b = ["GBP", "EUR", "JPY"]
conv_rate = [0.009, 1.17, 129.67]

আউটপুট: 1.3654250999999997 (INR → GBP → EUR → JPY)

অ্যালগরিদম

বেলম্যান-ফোর্ড বা রিল্যাক্সেশন বেসড অ্যাপ্রোচ ব্যবহার করে সব সম্ভাব্য পাথ রিল্যাক্স করা হয় যতক্ষণ না কনভার্জেন্স হয়।

পাইথন কোড

from collections import defaultdict

def solve(src, dest, curr_a, curr_b, conv_rate):
    temp = defaultdict(float)
    temp[src] = 1.0
    i = 0
    p = True
    while p and i <= len(temp):
        p = False
        for x, y, z in zip(curr_a, curr_b, conv_rate):
            if temp[x] * z > temp[y]:
                temp[y] = temp[x] * z
                p = True
        i += 1
    return temp[dest] if i <= len(temp) else -1

# টেস্ট
print(solve("INR", "JPY", ["INR","GBP","EUR"], ["GBP","EUR","JPY"], [0.009, 1.17, 129.67]))

ব্যাখ্যা

এটি মূলত একটি গ্রাফে সবচেয়ে বড় গুণনফল পথ বের করার সমস্যা। নেগেটিভ সাইকেল চেক করার প্রয়োজন নেই কারণ রেট পজিটিভ।

  1. পাইথনে গ্রাফ সবাই দ্বারা ট্রাভার্সেবল কিনা চেক করার প্রোগ্রাম

  2. পাইথনে ম্যাট্রিক্স থেকে সব k×k সাবম্যাট্রিক্সের ন্যূনতম মান বের করা

  3. পাইথনে কার্যকর অধ্যয়ন পদ্ধতি নির্ণয়

  4. পাইথনে কোনো সংখ্যা ২-এর ঘাত কিনা চেক করা