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

পাইথনে ফাইল নামগুলো ইউনিক করার প্রোগ্রাম


n সংখ্যক স্ট্রিং সম্বিষ্ট একটি names অ্যারে দেওয়া আছে। আমাদের nটি ডিরেক্টরি তৈরি করতে হবে যাতে i-তম মিনিটে names[i] নামে ডিরেক্টরি বানানো হয়। দুটি ফাইল একই নাম ধারণ করতে পারবে না। ডুপ্লিকেট নাম আসলে সিস্টেম অটোমেটিক্যালি (k) সাফিক্স যোগ করবে, যেখানে k হলো সেটি ইউনিক রাখার জন্য ন্যূনতম ধনাত্মক পূর্ণসংখ্যা। আমাদের কাজ হলো প্রতিটি ডিরেক্টরির প্রকৃত নাম ধারণকারী অ্যারে ফেরত দেওয়া।

যেমন, names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"] হলে আউটপুট: ['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc']।

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

  • dic := একটি ম্যাপ (ডিফল্ট মান ০)
  • res := খালি লিস্ট
  • names-এর প্রতিটি name এর জন্য:
    • যদি name dic-এ নেই, তবে dic[name] := dic[name] + 1, res-এ name যোগ করুন।
    • অন্যথায়:
      • newname := name + '(' + dic[name] + ')'
        • যখন newname dic-এ আছে, তখন dic[name] বাড়ান এবং newname আপডেট করুন।
      • dic[newname] := 1, res-এ newname যোগ করুন।
  • res ফেরত দিন।

উদাহরণ

from collections import defaultdict

def solve(names):
    dic = defaultdict(int)
    res = []
    for name in names:
        if name not in dic:
            dic[name] += 1
            res.append(name)
        else:
            newname = name + '(' + str(dic[name]) + ')'
            while newname in dic:
                dic[name] += 1
                newname = name + '(' + str(dic[name]) + ')'
            dic[newname] = 1
            res.append(newname)
    return res

names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
print(solve(names))

ইনপুট

["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]

আউটপুট

['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc']

  1. পাইথনে PDF CSV-তে কনভার্ট করা

  2. পাইথনে ইন্ডিয়ান ফ্ল্যাগ (ভারতীয় পতাকা) আঁকা

  3. পাইথনে ফাইল সার্চিং: os.walk() ব্যবহার করে

  4. পাইথন দিয়ে ওয়েবসাইট ব্লকার তৈরি করা