এতে আমরা পাইথনে প্রতিযোগিতামূলক প্রোগ্রামিংয়ের জন্য I/O পদ্ধতির বিভিন্ন উপায় দেখতে যাচ্ছি। প্রতিযোগিতামূলক প্রোগ্রামিং-এ ইনপুট যত তাড়াতাড়ি সম্ভব পড়া গুরুত্বপূর্ণ যাতে অন্যদের থেকে সুবিধা নেওয়া যায়।
ধরুন আপনি একটি কোডফোর্স বা অনুরূপ অনলাইন জুডে আছেন (যেমন এসপিওজে) এবং আপনাকে সংখ্যাগুলি a, b, c, d পড়তে হবে এবং তাদের পণ্যটি প্রিন্ট করতে হবে। করার একাধিক উপায় আছে, আসুন সেগুলি অন্বেষণ করি – এক এক করে
এটি করার একটি উপায় হল তালিকা বোঝা এবং মানচিত্র ফাংশন।
পদ্ধতি 1 :একটি তালিকা বোঝার ব্যবহার
a, b, c, d = [int(x) for x in input().split()] print(a*b*c*d)
পদ্ধতি 2 :মানচিত্র ফাংশন ব্যবহার করে
a, b, c, d = map(int, input().split()) print(a*b*c*d)
উপরের সমস্যাটি করার আরেকটি উপায় হল stdin এবং stdout ব্যবহার করা যা অনেক দ্রুত।
পদ্ধতি 1 a :stdin এবং stdout
সহ তালিকা বোঝাfrom sys import stdin, stdout a, b, c, d = [int(x) for x in stdin.readline().rstrip().split()] stdout.write(str(a*b*c*d) + "\n")
আসুন প্রতিযোগিতামূলক প্রোগ্রামিং থেকে আরেকটি সমস্যা দেখি যেখানে আমরা সমস্যাগুলির উপর আমাদের ইনপুট এবং আউটপুট পদ্ধতিগুলি পরীক্ষা করতে পারি। সমস্যাটিকে SPOJ-এ INTEST-Enormous Input Test বলা হয়৷
৷ইনপুট
ইনপুট দুটি ধনাত্মক পূর্ণসংখ্যা n k (n, k<=10 7 দিয়ে শুরু হয় ) ইনপুটের পরবর্তী n লাইনে একটি ধনাত্মক পূর্ণসংখ্যা ti থাকে, 10 9 এর বেশি নয় , প্রতিটি।
আউটপুট
আউটপুট করার জন্য একটি একক পূর্ণসংখ্যা লিখুন, কতটি পূর্ণসংখ্যা ti কে দ্বারা বিভাজ্য তা বোঝান।
কোথায়
-
ইনপুট :ইনপুট দুটি ধনাত্মক পূর্ণসংখ্যা n এবং k দিয়ে শুরু হয় (যেখানে- n, k <=10)। ইনপুটের পরবর্তী লাইনগুলিতে একটি ধনাত্মক পূর্ণসংখ্যা রয়েছে যা প্রতিটি 10*9 এর বেশি নয়৷
-
আউটপুট :একটি একক পূর্ণসংখ্যা নির্দেশ করে যে কতটি পূর্ণসংখ্যা t k দ্বারা বিভাজ্য।
যেমন
Input 7 3 1 51 966369 7 9 999996 11 Output 4
পদ্ধতি 1
উপরের সমস্যা সমাধানের একটি উপায় নীচে দেওয়া হল যদিও কার্যকরী নয়
def main(): n, k = [int(c) for c in input().split()] cnt = 0 for _ in range(n): t = int(input()) if t % k == 0: cnt += 1 print(cnt) if __name__ == "__main__": main()
পদ্ধতি 2
উপরের সমস্যা সমাধানের আরেকটি কার্যকর উপায় হল stdin এবং stdout ব্যবহার করা। নীচের প্রোগ্রামটি আগেরটির তুলনায় অনেক দ্রুত চলে৷
from sys import stdin, stdout def main(): n, k = [int(c) for c in input().split()] cnt = 0 for _ in range(n): t = int(stdin.readline()) if t % k == 0: cnt += 1 stdout.write(str(cnt)) if __name__ == "__main__": main()
পদ্ধতি 3
উপরের সমস্যাটি সমাধান করার আরেকটি উপায় যা উপরে উল্লিখিত আগের দুটির চেয়ে অনেক দ্রুত stdin এবং stdout ব্যবহার করে (যা আমরা পদ্ধতি 2-এ ব্যবহার করেছি তার মতোই) তবে, একবারে পুরো ইনপুটটি পড়ুন এবং এটি একটি তালিকায় লোড করুন। পি>
def main(): for sys import stdin, stdout n, k = stdin.readline().split() n = int(n) k = int(k) cnt = 0 lines = stdin.readlines() for line in lines: if int(line) % k == 0: cnt += 1 stdout.write(str(cnt)) if __name__ == "__main__": main()