Tugas:
Anda adalah programmer dan Stackoverflow-answerer yang luar biasa, dan Anda memutuskan untuk menjawab setiap pertanyaan dengan hadiah di Stackoverflow. Anda sangat baik, sehingga Anda berhasil mendapatkan semua hadiah dalam semua pertanyaan. Sementara Anda menunggu perwakilan datang membanjiri, Anda menulis sebuah program yang berjalan dan mencari tahu berapa jumlah total perwakilan di semua karunia itu.
Aturan:
- Saat dijalankan,
- Program Anda akan menavigasi melalui tab unggulan di Stack Overflow.
- Ini akan mengikis nilai dari setiap hadiah,
- Maka itu akan menambahkannya dan menampilkan total
- Itu harus mengunduh data dari mana saja di SO (dan hanya SO), tetapi saya akan merekomendasikan menggunakan https://stackoverflow.com/questions?pagesize=50&sort=featured , karena hanya sekitar 10 halaman
- Ini kode-golf , jadi kode terpendek menang
Jawaban:
JavaScript -
176133130108106Sunting 1: memangkas beberapa penyeleksi ke bawah dan menggunakan
?:
saran dari Google's Closure Compiler (via @Sirko - terima kasih)Sunting 2: inisialisasi
s
dalamd
dan inisialisasit
sebagai0
gantinya""
Sunting 3: menyadari Saya sebenarnya tidak perlu menargetkan wadah tertentu dan dapat menyapu seluruh dokumen, yang menghilangkan banyak
.find
panggilan dan pemilih yang tidak perlu (ditambah variabel yang memegangnya)Sunting 4: mendorong
t
penginisialisasi dalam panggilan fungsi untuk menghindari;
(itu akan diangkat ke atas pula) dan squash fungsi ke satu pernyataan (menggabungkan dua pernyataan menjadi satu di dalam kondisi pernyataan ternary) untuk menjatuhkan{}
Catatan : Saya tidak yakin apakah itu curang, tetapi ini harus dijalankan dari jendela konsol browser yang sudah diarahkan
http://stackoverflow.com/questions?page=1&sort=featured
. Itu bergantung pada fakta bahwa jQuery dan tautan halaman yang sesuai tersedia di halaman itu sendiri. Selain itu, tampaknya hanya berfungsi di Firefox dan tidak di IE atau Chrome.Output (pada saat posting):
Meledak / berkomentar :
sumber
s=" #mainbar";d=$(s);t="";function a(){d.find(".bounty-indicator").each(function(){t+=this.innerHTML});(u=d.find("[rel=next]")[0])?d.load(u.href+s,a):alert(eval(t))}a();
169 - digunakan Google Closure Compiler.(
paren, apakah itu benar-benar berfungsi?Python -
232,231,195,183,176, 174Parsing HTML dari https://stackoverflow.com/questions?sort=featured menggunakan ekspresi reguler.
The batas atas
range
difor
lingkaran harus menjadinumber of pages + 1
atau kode akan menaikkanHTTPError
karena 404s. Jumlah hasil default per-halaman adalah 15, yang merupakan kode yang digunakan (menghilangkan?pagesize=50
menyimpan karakter dan sama efektifnya).Terima kasih kepada @Gabe untuk tip tentang mengurangi jumlah char lebih jauh.
Golf :
Output (pada saat posting):
Tidak golf :
Ini versi yang agak tidak golf yang seharusnya sedikit lebih mudah dibaca dan dimengerti.
sumber
for
loop eksplisit dan turun ke 176:import urllib,re;print sum(sum(map(int,re.findall(r"<.*>\+(\d+)<.*>",urllib.urlopen("http://stackoverflow.com/questions?sort=featured&page=%u"%i).read())))for i in range(1,33))
+
diikuti dengan nomor. Misalnya judul pertanyaan bisa cocok dengan format itu.Rebol -
164133130 (139 dengan 404 cek)Parsing html menggunakan
parse
sub-bahasa Rebol. Memeriksa 98 halaman pertama. Saya menyadari bahwa saya memiliki kendala yang sama dengan solusi python - terlalu banyak pengulangan mencapai 404 kesalahan dan menghentikan eksekusi. Terima kasih kepada @rgchris untuk banyak peningkatan! Diperbarui untuk memeriksa hingga 98 halaman.s: 0 repeat n 99[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]s
Dengan pemeriksaan kesalahan untuk 404 (139):
s: 0 repeat n 99[attempt[parse read join http://stackoverflow.com/questions?sort=featured&page= n[15[thru{>+}copy x to{<}(s: s + do x)]]]]s
Uji
Penjelasan
Rebol mengabaikan spasi, maka Anda bisa meletakkan semuanya pada satu baris seperti itu jika Anda memilih. PARSE mengambil dua input, dan argumen pertama (
read join ...
) cukup jelas. Tetapi di sini ada beberapa komentar tentang instruksi dialek parse, dalam lekukan yang lebih tradisional:sumber
n
nilai yang lebih tinggi ... saat ini ada 28 halaman hadiah (untuk ukuran halaman 15). Tidak akan memengaruhi jumlah char Anda.Ruby, 260
Menggunakan Stack Exchange API.
Output (pada saat posting asli):
Saya tidak menghitung
&pagesize=100
dalam jumlah karakter, karena berfungsi tanpa itu, tapi saya hanya menambahkan itu untuk kenyamanan saat pengujian. Jika Anda menghapusnya, ia melakukan hal yang sama (kecuali itu memakan lebih banyak kuota dan memakan waktu sedikit lebih lama).sumber
require
s bisa diganti dengan-r
bendera baris perintah.Rebmu -
108107Tes (pukul 19:05 AEST)
Rebmu terlihat agak samar, tetapi cukup mudah dibaca begitu Anda terbiasa. Mari kita mulai dengan menghapusnya dan meletakkannya dengan benar.
Rebmu adalah dialek dari Rebol sehingga Anda dapat melihat kesamaan dalam solusinya. Rebmu belum bisa mengurangi ukuran setiap pernyataan, tetapi itu adalah bahasa yang berkembang. Sekali lagi terima kasih kepada @rgchris untuk peningkatan pada upaya pertama saya.
sumber
ti
(ke integer!) akan lebih aman daripadado
di Rebmu tanpa perubahan panjang kode.Ruby - 197
Versi pendek:
Versi ramah manusia:
Dan menjawab -
39700
Ruby dengan parameter skrip - 139
Untuk menjalankan ini dari tipe bash saja
sumber
require
s bisa diganti dengan-r
bendera baris perintah.PHP - 121 byte
Menggunakan pengubah 'eval' regex, untuk menghindari penggunaan
array_sum
atau serupa. Tampaknya menjadi solusi terpendek di antara entri yang valid.sumber
e
modifikator telah usang sebagai PHP 5.5, tetapi masih berguna untuk bermain golf tetap.PHP,
134,131, 127while($q=array_sum(preg_filter('#.*>\+#',0,file("http://stackoverflow.com/questions?sort=featured&page=".++$n))))$s+=$q;echo$s;
Akan mengulangi semua halaman,
pagesize
tidak diatur untuk menyimpan byte jadi lebih banyakGET
.Sangat Sangat Kotor, tapi ... mengambil keuntungan dari
PHP
"kekurangan"!echo
while
berhenti pada tugasRegEx
ganti adalah string yang dimulai dengan jumlah hadiaharray_sum()
menambahkan string$n
dan$s
diinisialisasi, tetapi mulai dari tidak ada sama sekali. mulai dari nolsumber
Bash 206
optimisasi mungkin, terlalu malas
hasil:
sumber
seq 1 11
dapat dikurangi menjadiseq 11
.Javascript -
129119110107 karakterEDIT: JAWABAN BURUK! Ini hanya menangani "Pertanyaan unggulan", yang hanya sebagian kecil saja. Jawaban Alconja lebih valid.
Jalankan di https://stackoverflow.com/?tab=featured di jendela konsol. Berdasarkan solusi dari Alconja.
Golf sedikit lebih banyak dengan menghapus spasi putih yang tidak dibutuhkan.
Eval yang digunakan untuk menghapus panggilan fungsi, membersihkan 9 karakter lainnya.
membersihkan beberapa spasi putih yang tidak dibutuhkan.
sumber
Jawa, 540 karakter
Peringatan: jumlah karunia aktif adalah ~ 470. Kode ini akan mengakses halaman di stackoverflow yang berkali-kali. Mungkin membuat Anda bermasalah dengan mereka karena membuat begitu banyak permintaan data.
Output saya
23400
, tetapi ketika saya menjalankan kode @ TonyH, saya mendapatkannya37550
. Kabar buruk.Kode cantik:
Cara kerjanya sederhana. Bunyinya dari url
http://stackoverflow.com/questions"
untuk menentukan jumlah pertanyaan yang memiliki karunia (catatan: jika jumlahnya meningkat, program gagal, tetapi jika turun, itu berfungsi dengan baik). Ini mencari nomor ini menggunakan regex:b.>(\\d+)
. Ini telah bekerja di semua tes hingga saat ini, tetapi jika seseorang mengajukan pertanyaan yang cocok dengan regex itu, ini mungkin tidak berhasil.Lalu, kita buka url
http://stackoverflow.com/questions?pagesize=1&sort=featured&page=
+current question #
. Dengan kata lain, kami membuka halaman baru untuk setiap pertanyaan unggulan, dan memaksa jumlah pertanyaan hanya1
, jadi kami akan mendapatkan semuanya. Bagian reputasi akan selalu cocokion.>.(\\d+)
, jadi saya menggunakannya untuk menemukannya. Saya membagi operasi menjadi dua bagian sehingga saya bisa dengan murah memeriksa apakah jumlah pertanyaan berkurang (yaitu string yang dikembalikan bukan bilangan bulat).Lalu, kami meringkas semua reputasi dan mencetaknya.
Butuh sekitar 3 menit dan 20 detik untuk berjalan di mesin saya.
Adakah yang tahu mengapa ini tidak mencetak nomor yang benar?
sumber
C # - 407
Menggunakan Stackoverflow.com. Sama seperti di bawah ini, kecuali tidak ada dekompresi Gzip dan regex yang berbeda.
Uji
Anehnya, mendapat nilai berbeda dari di bawah.
C # - 496
Ini menggunakan api.stackexchange yang di-gzip dan json.
Tidak dijinakkan:
Uji
Pagesize standar:
Pagesize = 100:
sumber
jQuery 191
Ia bekerja dari mana saja di stackexchange (dan banyak situs lainnya), tidak perlu berada di halaman tertentu seperti di @ Alconja / @ NateKerkhofs jawaban
sumber
$
PHP - 139
Golf:
Tidak Digubah - 147
Sederhana
file_get_contents
/preg_match
/array_sum
Uji:
sumber
Bash 174
Berdasarkan https://codegolf.stackexchange.com/a/25180/7664 :
sumber
pagesize=50&
dan hanya loop lagi (saya pikir ukuran halaman default jika 15).Python (174 karakter):
Memperluas jawaban python di atas (tidak memiliki cukup karma untuk berkomentar):
Permintaan pengganti urllib mengurangi 2 karakter.
sumber
Ruby (176 karakter):
Mengikuti contoh Tony H. tentang menggunakan nomor halaman kode-keras, inilah yang saya dapat:
memberi saya 35300 pada saat penulisan.
sumber