Semua orang tahu bahwa konten membuat pertanyaan. Tapi gelar yang bagus juga membantu, dan itulah hal pertama yang kita lihat. Inilah saatnya untuk mengubah kesan pertama itu menjadi sebuah program, dan mencari tahu judul-judul apa yang mendapatkan lebih banyak suara.
Anda dengan ini ditantang untuk menulis program atau fungsi yang mengambil judul pertanyaan PPCG sebagai input, dan mengembalikan prediksi nilainya.
Misalnya, Anda mungkin menerima Counting Grains of Rice
sebagai masukan, dan Anda akan mencoba mengembalikan sesuatu yang mendekati skor, 59
dalam hal ini. Tebakan non-integer baik-baik saja, tetapi tebakan pada atau di bawah -20
tidak.
Berikut adalah datanya, untuk pengujian dan penilaian:
http://data.stackexchange.com/codegolf/query/244871/names-and-upvotes
Penilaian: Program Anda akan dijalankan pada setiap pertanyaan dalam riwayat situs (PPCG) ini, tidak termasuk pertanyaan tertutup. Fungsi ln(score + 20)
kemudian akan diterapkan ke setiap skor, dan untuk setiap tebakan. Root-mean-squared-error antara dua set nilai yang dihasilkan adalah skor Anda. Lebih rendah lebih baik.
Misalnya, sebuah program yang menebak 0 setiap kali akan mencetak 0,577, sedangkan yang menebak 11 setiap kali akan mencetak 0,362.
Silakan hitung skor Anda dan sertakan dalam judul jawaban Anda. Harap sertakan juga prediksi program Anda untuk berapa banyak upvotes yang akan didapat pertanyaan ini.
Pembatasan:
Untuk mencegah pengkodean yang berlebihan, tidak lebih dari 1000 karakter.
Harus dijalankan pada seluruh data yang ditetapkan di atas dalam waktu kurang dari satu menit pada mesin yang masuk akal.
Lubang Standar ditutup.
Berikut ini adalah penguji yang ditulis dengan Python, untuk penggunaan Anda dan / atau untuk menjernihkan ambiguitas:
import sys
import math
import csv
scores_dict = {}
with open(sys.argv[1], 'r') as csv_file:
score_reader = csv.reader(csv_file)
for score, title in score_reader:
if score == 'Score':
continue
scores_dict[title] = int(score)
def rate_guesses(guesser):
def transform(score):
return math.log(score + 20) if score > -20 else 0
off_by_total = 0
lines_count = 0
for title in scores_dict:
guessed_score = guesser(title)
real_score = scores_dict[title]
off_by_total += (transform(real_score) - transform(guessed_score)) ** 2
return (off_by_total/len(scores_dict)) ** .5
def constant11(title):
return 11
print(rate_guesses(constant11))
sumber
[closed]
dan[on hold]
, di mana berlaku?Jawaban:
Python 2, 991 karakter, skor 0,221854834221, prediksi 11
Penjelasan:
Ini adalah hardcoding yang tidak tahu malu, tetapi berusaha melakukannya dengan efisien.
Pra-pemrosesan:
Dalam kode terpisah, saya memotong setiap judul dengan nilai antara 0 dan 256 ^ 2-1. Sebut saja nilainya nampan ini. Untuk setiap nampan, saya menghitung skor rata-rata. (Rata-rata diperlukan karena untuk sebagian kecil dari nampan, ada tabrakan - lebih dari 1 judul hash ke nampan yang sama. Tapi untuk sebagian besar setiap judul memetakan ke nampan sendiri).
Gagasan di balik kode 2-byte untuk setiap judul adalah bahwa 1 byte tidak cukup - kita mendapatkan terlalu banyak tabrakan, jadi kita tidak benar-benar tahu skor apa yang harus ditetapkan untuk setiap nampan 1-byte. Tetapi dengan bin 2-byte, hampir tidak ada tabrakan, dan kami secara efektif mendapatkan representasi 2 byte dari setiap judul.
Kemudian beri peringkat nampan - hitung gain dalam skor jika kita menetapkan nampan ini nilainya yang dihitung, alih-alih hanya menebak 11. Ambil n nampan teratas, dan kode mereka ke dalam string (yang d dalam kode aktual).
Pengkodean: kunci tempat sampah dikodekan sebagai 2 byte. nilai dikodekan menggunakan 1 byte. Saya menemukan nilai antara -8 dan 300 + sesuatu, jadi harus memeras sedikit untuk mendapatkannya menjadi 1 byte: x -> (x + 8) / 2.
Kode aktual:
baca d sebagai byte triplet, decoding encoding yang dijelaskan di atas. Ketika sebuah judul diberikan, hitung hash-nya (modulo 256 ^ 2), dan jika kunci itu ditemukan dalam dict, kembalikan nilai yang dipetakannya. Kalau tidak, kembalikan 11.
sumber
Javascript ES6
Nilai: 0,245663
Panjang: 1000 byte
Prediksi: 5
(Saya kira pertanyaannya adalah karena longvotes downvotes yang tak terduga.: P)
Diperkecil
Diperluas
Fungsi
S
menerima string (judul) dan mengembalikan nilainya.Catatan tentang Perilaku:
sumber
Python 2, Skor = 0,335027, 999 karakter, Prediksi 11,34828 untuk pertanyaan ini
Hanya untuk membuat bola bergulir. Ini tidak optimal.
SVM yang mewah hanyalah ide acak saya dan saya ingin mengimplementasikannya, jadi ini dia. Itu meningkatkan baseline sebesar 0,02 poin, jadi saya cukup senang dengan itu. Tetapi untuk menunjukkan bahwa pengkodean keras input adalah tempat sebagian besar perbaikan berasal, saya juga mengkode beberapa jawaban.
Tanpa hard-coding skornya adalah 0,360 (dan sebenarnya semua prediksi sekitar 11, haha)
Saya menggunakan scikit-learn dan nltk
sumber
Python 2, 986 karakter, skor 0,3480188, prediksi 12
Fungsi yang relevan adalah
J
.Program ini pada dasarnya Naif Bayes menggunakan kata-kata judul sebagai fitur, tetapi ini sangat terbatas berkat batas char. Bagaimana dibatasi? Baik...
w
atas). Kompresi dilakukan dengan menata ulang kembar tiga sehingga sebanyak mungkin surat berlipat ganda, dan pasangan ini diganti dengan huruf besar ASCII yang sesuai (mis. FiLoNoN ... → fil, lon, non, ...)m
,s
di atas, dengan menggunakan fakta bahwa rata-rata / sd yang paling 90 (memungkinkan encoding ASCII langsung, karena ada 95 ASCII dicetak)G
adalah fungsi distribusi normal - kita membulatkan e ke 2dp dan akar kuadrat terbalik dari 2 pi hingga 1 dp untuk menghemat karakter.Secara keseluruhan, batas char ekstrim membuat ini menjadi salah satu ide terburuk yang pernah saya buat, tapi saya cukup senang dengan seberapa banyak saya berhasil menjejalkannya (meskipun itu tidak bekerja dengan baik). Jika ada yang punya ide lebih baik untuk kompresi, beri tahu saya :)
(Terima kasih kepada KennyTM karena menunjukkan kompresi tidak berguna saya)
sumber
w='grge…scse';w=[w[i:i+2]for i in range(0,len(w),2)]
adalah 165 byte sedangkan AndaC=lambda:…;w=C('…')
adalah 179 byte.Python 2, 535 karakter, skor 0,330910, memprediksi 11,35
Rata-rata skor untuk judul yang berisi setiap kata, lalu gunakan 50 kata teratas dan terbawah untuk mengubah skor BASE dalam
guess(title)
fungsi.Kode python:
sumber
C
Nilai:
Panjang Tidak Diketahui : 5 byte
Prediksi: 5
Golf:
Tidak Disatukan:
Kueri skor memberikan skor rata-rata 5.
Saya tidak punya kemampuan untuk mengujinya saat ini, orang lain dipersilakan untuk menjalankan / mengedit.
sumber