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

প্রতিযোগিতামূলক কোডিং-এর জন্য পাইথন ট্রিকস


পাইথন প্রতিযোগিতামূলক প্রোগ্রামিং চ্যালেঞ্জের জন্য কোডারদের পছন্দের ভাষাগুলোর একটি। অধিকাংশ সমস্যা পাইথন দিয়ে যুক্তিসঙ্গত সময়ে সমাধান করা যায়।

কিছু জটিল সমস্যার জন্য যথেষ্ট দ্রুত পাইথন কোড লেখা প্রায়শই একটি চ্যালেঞ্জ। নিচে কিছু পাইথনিক কোড কনস্ট্রাক্ট দেওয়া হলো যা প্রতিযোগিতামূলক কোডিং-এ আপনার কোডের পারফরম্যান্স বাড়াতে সাহায্য করে:

১. স্ট্রিং কনক্যাটেনেশন (String Concatenation): নিচের কনস্ট্রাক্ট ব্যবহার করবেন না।

str1 = ""
some_list = ["Welcome ", "To ", "Tutorialspoint "]
for x in some_list:
    str1 += x
print(str1)

উপরের মেথড বিশাল টাইম ওভারহেড দেয়। এর বদলে এটি ব্যবহার করুন (join মেথড):

str1 = ""
some_list = ["Welcome ", "To ", "Tutorialspoint "]
print(str1.join(some_list))

২. Map ফাংশন (The Map Function):

সাধারণত প্রতিযোগিতামূলক কোডিং-এ ইনপুট এমন থাকে:

1234567

এগুলোকে সহজে সংখ্যার লিস্ট হিসেবে পেতে:

list(map(int, input().split()))

ইনপুট টাইপ যেন যাই হোক, সবসময় input() ফাংশন ব্যবহার করুন এবং তারপর map ফাংশন দিয়ে কনভার্ট করুন।

>>> list(map(int, input("enter numbers:").split()))
enter numbers:1 2 3 4 5 6 7
[1, 2, 3, 4, 5, 6, 7]
>>>

Map ফাংশন পাইথনের সবচেয়ে সুন্দর বিল্ট-ইন ফাংশনগুলোর একটি, যা অনেক সময় খুব কাজে আসে। জানা ভালো।

৩. Collections মডিউল:

যদি আমরা একটি লিস্ট থেকে ডুপ্লিকেট রিমুভ করতে চাই। জাভা মত অন্যান্য ল্যাঙ্গুয়েজে HashMap বা অন্য কোনো জটিল পদ্ধতি ব্যবহার করতে হতে পারে, কিন্তু পাইথনে এটি সহজ:

>>> print(list(set([1,2,3,4,3,4,5,6])))
[1, 2, 3, 4, 5, 6]

লিস্ট মার্জ করার সময় extend() এবং append()-এর ব্যবহারে সতর্ক থাকুন।

>>> a = [1, 2, 3, 4]  # লিস্ট ১
>>> b = [5, 6, 7]     # লিস্ট ২
>>> a.extend(b)       # এক লিস্ট দেয়
>>> a
[1, 2, 3, 4, 5, 6, 7]
>>> a.append(b)       # লিস্ট অফ লিস্ট দেয়
>>> a
[1, 2, 3, 4, [5, 6, 7]]

৪. ল্যাঙ্গুয়েজ কনস্ট্রাক্টস (Language Constructs):

কোড ফাংশনের ভেতর লিখা ভালো, যদিও পাইথন প্রোসিজারেল কোড সাপোর্ট করে।

def main():
    for i in range(2**3):
        print(x)
main()

এটি নিচের চেয়ে ভালো:

for x in range(2**3):
    print(x)

Cpython ইমপ্লিমেন্টেশনের কারণে লোকাল ভেরিয়েবল স্টোর করা গ্লোবালের চেয়ে দ্রুত।

৫. স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করুন:

বিল্ট-ইন ফাংশন এবং স্ট্যান্ডার্ড লাইব্রেরি প্যাকেজ যতটা সম্ভব ব্যবহার করা উচিত। নিচের কোডের বদলে:

newlist = []
for x in somelist:
    newlist.append(myfunc(x))

এটি ব্যবহার করুন:

newlist = map(myfunc, somelist)

একইভাবে, itertools (স্ট্যান্ডার্ড লাইব্রেরি) ব্যবহার করার চেষ্টা করুন, কারণ সােহাজ কাজের জন্য সেগুলো অনেক দ্রুত। উদাহরণস্বরূপ, পারমুটেশন পাওয়ার জন্য কয়েক লাইন কোডে লুপ তৈরি করা যায়।

>>> import itertools
>>> iter = itertools.permutations(["a","b","c"])
>>> list(iter)
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

৬. জেনারেটরস (Generators):

জেনারেটরস আপনার লিখে কোডের মেমরি ফুটপ্রিন্ট এবং এভারেজ টাইম কমপ্লেক্সিটি দুটোই কমানোর জন্য চমৎকার কনস্ট্রাক্ট।

def fib():
    a, b = 0, 1
    while 1:
        yield a
        a, b = b, a+b

  1. পাইথন প্রোগ্রাম: সিম্পল ইন্টারেস্ট ক্যালকুলেশন

  2. পাইথন প্রোগ্রাম: সিলেকশন সোর্ট অ্যালগরিদম

  3. উইন্ডোজে পাইথন প্রোগ্রামিং-এ IDE সমূহ

  4. প্রতিযোগিতামূলক কোডিং-এ পাইথন কেন সেরা পছন্দ?