मैंने मौजूदा उत्तरों पर एक त्वरित बेंचमार्क किया है
- केवल मानक उपकरणों का उपयोग करें (जैसे
lua
या सामान के लिए क्षमा करें rocket
),
- असली एक-लाइनर हैं,
- बड़ी संख्या में (100 मिलियन) जोड़ने में सक्षम हैं, और
- तेज हैं (मैंने एक मिनट से ज्यादा समय तक ध्यान नहीं दिया)।
मैंने हमेशा 1 से 100 मिलियन की संख्या को जोड़ा जो कि कई समाधानों के लिए एक मिनट से भी कम समय में मेरी मशीन पर उल्लेखनीय था।
यहाँ परिणाम हैं:
अजगर
:; seq 100000000 | python -c 'import sys; print sum(map(int, sys.stdin))'
5000000050000000
# 30s
:; seq 100000000 | python -c 'import sys; print sum(int(s) for s in sys.stdin)'
5000000050000000
# 38s
:; seq 100000000 | python3 -c 'import sys; print(sum(int(s) for s in sys.stdin))'
5000000050000000
# 27s
:; seq 100000000 | python3 -c 'import sys; print(sum(map(int, sys.stdin)))'
5000000050000000
# 22s
:; seq 100000000 | pypy -c 'import sys; print(sum(map(int, sys.stdin)))'
5000000050000000
# 11s
:; seq 100000000 | pypy -c 'import sys; print(sum(int(s) for s in sys.stdin))'
5000000050000000
# 11s
awk
:; seq 100000000 | awk '{s+=$1} END {print s}'
5000000050000000
# 22s
पेस्ट और ई.पू.
यह मेरी मशीन पर स्मृति से बाहर भाग गया। इसने इनपुट के आधे आकार (50 मिलियन संख्या) के लिए काम किया:
:; seq 50000000 | paste -s -d+ - | bc
1250000025000000
# 17s
:; seq 50000001 100000000 | paste -s -d+ - | bc
3750000025000000
# 18s
तो मुझे लगता है कि यह 100 मिलियन नंबरों के लिए ~ 35s लिया होगा।
पर्ल
:; seq 100000000 | perl -lne '$x += $_; END { print $x; }'
5000000050000000
# 15s
:; seq 100000000 | perl -e 'map {$x += $_} <> and print $x'
5000000050000000
# 48s
माणिक
:; seq 100000000 | ruby -e "puts ARGF.map(&:to_i).inject(&:+)"
5000000050000000
# 30s
सी
बस तुलना के लिए मैंने सी संस्करण संकलित किया और यह भी परीक्षण किया, बस यह अंदाजा लगाने के लिए कि टूल-आधारित समाधान कितने धीमे हैं।
#include <stdio.h>
int main(int argc, char** argv) {
long sum = 0;
long i = 0;
while(scanf("%ld", &i) == 1) {
sum = sum + i;
}
printf("%ld\n", sum);
return 0;
}
:; seq 100000000 | ./a.out
5000000050000000
# 8s
निष्कर्ष
सी बेशक 8s के साथ सबसे तेज है, लेकिन Pypy समाधान केवल 30% से 11s के बारे में बहुत कम ओवरहेड जोड़ता है । लेकिन, निष्पक्ष होने के लिए, Pypy बिल्कुल मानक नहीं है। अधिकांश लोगों के पास केवल CPython स्थापित है जो कि काफी धीमी (22s) है, बिल्कुल लोकप्रिय Awk समाधान के रूप में।
मानक उपकरणों पर आधारित सबसे तेज़ समाधान पर्ल (15 एस) है।