इसमें हम पायथन में कॉम्पिटिटिव प्रोग्रामिंग के लिए विभिन्न I/O मेथड्स देखेंगे। कॉम्पिटिटिव प्रोग्रामिंग में इनपुट को जितनी तेज़ी से संभव हो पढ़ना महत्वपूर्ण है ताकि दूसरों पर बढ़त मिल सके।
मान लीजिए आप कोडफोर्स या इसी तरह के ऑनलाइन जज (जैसे SPOJ) पर हैं और आपको संख्याएं 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 का उपयोग करना है जो बहुत तेज़ है।
मेथड 1a: 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-एनॉर्मस इनपुट टेस्ट कहलाती है।
समस्या विवरण
इनपुट: इनपुट दो पॉजिटिव इंटीजर्स n k (n, k ≤ 10⁷) से शुरू होता है। अगली n लाइन्स में एक पॉजिटिव इंटीजर ti होता है, जो 10⁹ से अधिक नहीं होता।
आउटपुट: एक सिंगल इंटीजर आउटपुट करें, जो दर्शाता है कि कितने इंटीजर्स ti, 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: पूरा इनपुट एक बार में पढ़ें (सबसे तेज़)
from sys import stdin, stdout
def main():
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()