Dalam tantangan ini, tugas Anda adalah membuat program menulis dengan kurang dari 300 karakter yang membutuhkan paragraf pendek atau beberapa kalimat yang dikatakan seorang kandidat dan menampilkan siapa yang mengatakannya.
Input : Dapat diambil sebagai parameter untuk suatu fungsi, input ke program dll. Ini akan menjadi paragraf pendek, diselingi dengan benar.
Keluaran : Calon yang Anda pikirkan. Ini bisa jadi salah satunya
Ben Carson (1)
Ted Cruz (2)
John Kasich (3)
Marco Rubio (4)
Donald Trump (5)
Hillary Clinton (6)
Bernie Sanders (7)
Saya telah meninggalkan nama-nama orang yang keluar pada tanggal 1 Maret. Anda dapat menampilkan nama itu sendiri, atau, lebih mudahnya, nomor yang sesuai dengan namanya.
Mencetak: Anda adalah persentase dari kasus uji yang Anda lakukan dengan benar. Kemenangan skor tertinggi. Dasi (atau skor sempurna) dipecah berdasarkan panjang kode seperti pada kode golf.
Kasus uji dapat ditarik dari:
http://www.presidency.ucsb.edu/debates.php
Klik pada setiap debat, baik Demokrat dan Republik yang telah terjadi sejauh ini (sebelum 1 Maret). Setiap paragraf adalah uji kasus, kecuali jika "paragraf" kurang dari 20 karakter.
Berikut ini adalah kode yang mengeluarkan kasus uji dari halaman tertentu:
var t = $(".tools").parentNode.querySelectorAll("p");
var categ = {}, cur = 0;
for (var i = 0; i < t.length; ++i) {
var p = t[i], str = p.innerText;
if (p.querySelector("b")) {
cur = p.querySelector("b").innerText.replace(':', '');
str = str.replace(/^.*?:\s/, '');
}
str = str.replace(/\[applause\]/g, '')
if (str.length < 20) continue;
if (categ[cur] == null) categ[cur] = [];
categ[cur].push(str);
}
Anda kemudian bisa melakukannya categ.SANDERS
untuk mendapatkan daftar semua paragraf yang dikatakan Senator Sanders.
Anda dapat membuang apa pun yang tidak dikatakan oleh kandidat yang tercantum di atas (misalnya categ.BUSH
ataucateg.CHRISTIE
).
Berikut adalah file dengan semua kasus uji: https://drive.google.com/file/d/0BxMn8--P71I-bDZBS2VZMDdmQ28/view?usp=sharing
File ini diatur oleh kandidat
CANDIDATE CANDIDATE_LAST_NAME
(empty line)
Series of statements. Each paragraph is separated by (NEW PARAGRAPH)-
(empty line)
CANDIDATE NEXT_CANDIDATE_LAST_NAME
(empty line)
etc.
Contoh pengiriman sebagian adalah:
if (/ win | wall | great | beautiful/.test(p)) return 5;
if (/ percent | top one | rigged /.test(p)) return 7;
// etc. for all candidates
atau
var words = p.split(' ');
// majority of words have less than 5 characters
if (words.length - words.filter(a => a.length < 5).length < 4) evidence[5]++;
// at the end
return /* index with the most evidence */
Berikut adalah tempat di mana Anda dapat menguji solusi javascript: https://jsfiddle.net/prankol57/abfuhxrh/
Kode menggunakan parameter p
untuk mewakili frasa untuk mengklasifikasikan. Contoh kode yang mendapat skor sekitar 20% (menebak akan mendapatkan sekitar 11%):
if (/ rigged | top | percent | Wall Street /.test(p)) return 'Sanders';
return 'Trump';
Persis apa yang saya tanyakan: Tulis program / fungsi dalam kurang dari 300 karakter yang mengambil sebagai input frase yang dikatakan seorang kandidat dan kembali sebagai output yang kandidat mengatakannya. Skor Anda adalah persentase dari kasus uji yang Anda lakukan dengan benar. Kemenangan skor tertinggi.
Ya, saya tahu bahwa banyak baris memiliki [laughter]
atau [cheering]
di dalamnya. Ini tidak akan dihapus. Paling buruk, itu adalah informasi tambahan yang bisa Anda abaikan; paling-paling, itu adalah informasi tambahan yang dapat Anda gunakan (mis. saya mengada-ada, tetapi mungkin orang tertawa adalah bukti bahwa Marco Rubio berbicara). Kasing uji adalah seperti yang ditampilkan dalam file teks.
sumber
Jawaban:
Polyglot, ~ 18,6%
Ini berfungsi di: Cjam, Pyth, TeaScript, Japt, Seriously, 05AB1E, GolfScript, Jelly, dan mungkin masih banyak lagi.
Ini menghasilkan Hillary untuk semua input. Ini karena Hillary yang paling banyak bicara. Meskipun ini bukan cara yang paling cerdik untuk melakukan ini. Ia bekerja ¯ \ _ (ツ) _ / ¯
sumber
Pyth, 34,16% (297 byte)
(perhatikan bahwa beberapa garis berakhir dengan spasi)
Saya telah menggunakan opsi paling sederhana yang dapat saya pikirkan: periksa daftar pola, dan segera setelah Anda menemukan kecocokan, hasilkan kandidat yang sesuai. Jika semuanya gagal, hasilkan kandidat yang paling mungkin dari sisanya. Setelah itu, semuanya tentang menjejalkan sebanyak mungkin data ke dalam 300 byte.
Kerusakan:
Jadi dari mana data itu berasal? Strukturnya sederhana:
(dengan entri di bagian akhir tanpa frasa untuk bertindak sebagai mundur terakhir)
Tapi mengapa barang-barang tertentu itu? Saya menulis program C ++ untuk menganalisis dataset yang disediakan (dengan beberapa pembersihan baris baru secara manual untuk membuat struktur konsisten). Itu terlihat pada semua substring ("token") di setiap kutipan (1-16 karakter), kemudian berulang kali memeriksa token yang memberikan manfaat paling besar untuk pergi berikutnya dalam daftar. Setelah pola ada dalam daftar, hapus tanda kutip yang cocok dan ulangi (itu menjadi sedikit lebih rumit untuk membuatnya cepat tapi itulah dasarnya). Kode ini mungkin terlalu panjang untuk dimasukkan di sini, tetapi saya mungkin akan meletakkannya di github nanti (ketika saya sudah sedikit membersihkannya).
Saya mencoba beberapa sistem penilaian. Pada akhirnya saya memilih yang ini:
Pendekatan yang lebih ketat dengan hanya memperbolehkan item baru yang tidak memperkenalkan jawaban yang salah nampaknya macet sekitar 20-25%, membutuhkan banyak pola untuk menjadi lebih tinggi. Pendekatan fuzzier ini jauh lebih baik, dan masih dapat mencapai akurasi ~ 80% (dengan 550 item). Skor yang dikirimkan memiliki 38 item, yang merupakan jumlah maksimum yang bisa saya masukkan dalam batas 300 karakter.
Hasil 34% sebenarnya berasal dari program uji C ++ yang melakukan langkah-langkah yang sama. Seharusnya cocok, tapi saya belum punya harness uji Pyth untuk memeriksanya.
Ini adalah pertama kalinya saya menggunakan Pyth, jadi saya membayangkan beberapa byte lagi bisa dicabut, memungkinkan data sedikit lebih banyak.
sumber
."
.Javascript, 32.87%
299 Karakter:
Strategi:
Saya melakukan pencarian bruce force pada segmen kata mana yang akan dimasukkan dalam "hash". Kemudian pencarian string terjadi dengan hash sedemikian rupa sehingga memilih kandidat yang paling mungkin untuk hash itu.
Kode itu sendiri:
Ini adalah pengiriman golf kode pertama saya, jadi saran dipersilahkan :)
sumber
Mathematica, 23,7775%
Ini menghitung kemunculan kata kunci umum yang unik untuk setiap kandidat dan menampilkan jumlah kandidat dengan skor tertinggi.
Pada dasarnya, saya menemukan kata-kata yang paling umum dari semua kandidat
dan memilih kata kunci umum yang unik untuk setiap kandidat.
Setelah secara manual menghapus beberapa kata kunci, ini adalah tabel terakhir:
Dengan kata kunci ini total panjang fungsi adalah 211 karakter. Saya menguji fungsi atas semua kutipan:
yang memberikan akurasi 23,7775%.
sumber
Python, 25.677868%
Secara sewenang-wenang memilih empat karakter berbeda yang akan digunakan untuk mengidentifikasi kandidat. Setiap kandidat diberikan faktor skor per karakter berdasarkan pencarian mendaki bukit yang saya jalankan selama beberapa menit hingga berakhir pada 25,68%.
Saya kira ini setidaknya membuktikan bahwa konsepnya lebih baik daripada memilih kandidat yang ditutup matanya atau hanya memilih Clinton, tetapi saya akan tertarik melihat seseorang menerapkan algoritma pencarian yang lebih baik, baik untuk faktor maupun karakter yang digunakan.
sumber
Javascript, TBD
Mengubah setiap string menjadi kode hash, kemudian menggunakan metode probabilistik untuk menentukan pembicara. Akan lebih baik jika seseorang dengan pengaturan yang bagus bisa menguji ini untuk saya.
sumber
a+=
pasti salah ketik.