কম্পিউটার

পাইথনে সিটি ব্লক দেখার মোট দূরত্ব


ধরুন আমাদের কাছে শহরের ব্লকগুলিকে প্রতিনিধিত্বকারী অনন্য স্ট্রিংগুলির একটি ম্যাট্রিক্স রয়েছে এবং স্ট্রিংগুলির আরেকটি তালিকা রয়েছে যা দেখার জন্য ব্লক রয়েছে৷ আমরা যদি ব্লক ম্যাট্রিক্সে থাকি[0][0], তাহলে প্রতিটি ব্লকে ক্রমানুসারে পরিদর্শনের জন্য প্রয়োজনীয় মোট ম্যানহাটন দূরত্ব খুঁজুন।

সুতরাং, যদি ইনপুট মত হয়

প্রশ্ন B C
D E Z
G G i

ব্লক =[H,B,C]

তাহলে আউটপুট হবে 6 কারণ "h" হল 2 ব্লক নীচে (দক্ষিণ) এবং 1 ব্লক ডান (পূর্ব), "b" হল 2 ব্লকআপ (উত্তর), "c" হল 1 ব্লক ডান (পূর্ব)।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • coords :='স্টার্ট' কী এবং মান (0, 0) সহ একটি মানচিত্র
  • মাদুরের প্রতিটি সারির জন্য, করুন
    • ম্যাটের প্রতিটি কলের জন্য, করুন
      • কোর্ডে (সারি, কল) ঢোকান[mat[রো, কল]]
  • dist :=0
  • শুরুতে 'স্টার্ট' যোগ করে ব্লক আপডেট করুন
  • আমি 0 থেকে ব্লকের আকার -1 এর জন্য,
      করুন
    • c1 :=coords[blocks[i]]
    • c2 :=coords[block[i+1]]
    • d :=|c1[0]-c2[0]| + |c1[1]-c2[1]|
    • dist :=dist + d
  • প্রত্যাবর্তন জেলা

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

class Solution:
   def solve(self, mat, blocks):
      coords = {'start': (0,0)}
      for row in range(len(mat)):
         for col in range(len(mat[row])):
            coords[mat[row][col]] = (row,col)
      dist = 0
      blocks = ['start']+blocks
      for i in range(len(blocks)-1):
         c1 = coords[blocks[i]]
         c2 = coords[blocks[i+1]]
         d = abs(c1[0]-c2[0]) + abs(c1[1]-c2[1])
         dist += d
      return dist
ob = Solution()
inp = [["q", "b", "c"],
["d", "e", "z"],
["g", "h", "i"]]
blk = ["h", "b", "c"]
print(ob.solve(inp, blk))

ইনপুট

[["q", "b", "c"],["d", "e", "z"],["g", "h", "i"]]

আউটপুট

6

  1. C++ এ মোট হ্যামিং দূরত্ব

  2. পাইথনে দুটি আয়তক্ষেত্র দ্বারা আচ্ছাদিত মোট এলাকা খুঁজে বের করার প্রোগ্রাম

  3. পাইথন প্রোগ্রাম একটি প্রদত্ত স্ট্রিং শব্দ গণনা?

  4. পাইথনে Minkowski দূরত্ব