Saya sudah melakukan patokan cepat pada jawaban yang ada
- hanya menggunakan alat standar (maaf untuk hal-hal seperti
lua
atau rocket
),
- adalah one-liners nyata,
- mampu menambahkan angka dalam jumlah besar (100 juta), dan
- cepat (saya mengabaikan yang membutuhkan waktu lebih dari satu menit).
Saya selalu menambahkan angka 1 hingga 100 juta yang dapat dilakukan pada komputer saya dalam waktu kurang dari satu menit untuk beberapa solusi.
Inilah hasilnya:
Python
:; 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
Tempel & Bc
Ini kehabisan memori pada mesin saya. Ini berfungsi untuk setengah ukuran input (angka 50 juta):
:; seq 50000000 | paste -s -d+ - | bc
1250000025000000
# 17s
:; seq 50000001 100000000 | paste -s -d+ - | bc
3750000025000000
# 18s
Jadi saya kira itu akan mengambil ~ 35 untuk 100 juta angka.
Perl
:; seq 100000000 | perl -lne '$x += $_; END { print $x; }'
5000000050000000
# 15s
:; seq 100000000 | perl -e 'map {$x += $_} <> and print $x'
5000000050000000
# 48s
Rubi
:; seq 100000000 | ruby -e "puts ARGF.map(&:to_i).inject(&:+)"
5000000050000000
# 30s
C
Hanya untuk perbandingan, saya menyusun versi C dan menguji ini juga, hanya untuk mengetahui seberapa jauh lebih lambat solusi berbasis alat.
#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
Kesimpulan
C tentu saja tercepat dengan 8s, tetapi solusi Pypy hanya menambahkan sedikit overhead sekitar 30% menjadi 11s . Tapi, agar adil, Pypy tidak sepenuhnya standar. Kebanyakan orang hanya menginstal CPython yang jauh lebih lambat (22-an), persis secepat solusi populer Awk.
Solusi tercepat berdasarkan pada alat standar adalah Perl (15s).