Diberikan input dari string yang terdiri dari pesan apa pun dari ruang obrolan situs kami yang diambil dari daftar yang dijelaskan dan ditautkan di bawah ini, menghasilkan nilai yang benar atau salah yang mencoba memprediksi apakah pesan itu dibintangi atau tidak dalam 50 byte atau kurang.
Anda dapat menggunakan nilai kebenaran atau kepalsuan apa pun , tetapi nilai tersebut harus identik (yaitu hanya akan ada dua kemungkinan keluaran, satu kebenaran dan satu kepalsuan). Input akan diberikan sebagai HTML mentah dengan baris baru dihapus, dan mungkin berisi karakter Unicode non-ASCII. Jika Anda membutuhkan input selain UTF-8, harap katakan demikian dalam jawaban Anda.
Pengajuan pemenang untuk tantangan ini akan menjadi yang memprediksi persentase tertinggi dari pesan obrolan dengan benar, dari daftar yang ditautkan di bawah. Jika dua kiriman yang diberikan memiliki tingkat keberhasilan yang sama, kiriman yang lebih pendek akan menang.
Harap berikan instruksi untuk menjalankan kode Anda pada seluruh rangkaian pesan dan menghitung persentase dengan benar. Idealnya, ini harus sedikit kode boilerplate (tidak dihitung terhadap 50 byte Anda) yang loop melalui kasus uji positif dan output berapa banyak dari mereka kode Anda sudah benar dan kemudian melakukan hal yang sama untuk kasus uji negatif. (Skor keseluruhan kemudian dapat dihitung secara manual melalui (correctPositive + correctNegative) / totalMessages
.)
Agar kode Anda dapat diuji secara wajar, harus diselesaikan dalam 5 menit atau kurang untuk seluruh daftar pesan obrolan pada perangkat keras modern yang masuk akal.
Daftar lengkap pesan obrolan dapat ditemukan di sini , dan itu terdiri dari 1000 pesan berbintang terbaru sebagai kasus uji kebenaran dan 1000 pesan terbaru tanpa bintang sebagai kasus uji palsu. Perhatikan bahwa ada dua file di intinya; gulir sekitar setengah ke bawah untuk pesan yang tidak berbintang.
sumber
O2
Don'?t star
\^
Jawaban:
Retina , 50 byte,
71,8%72,15%Mencoba beberapa golf regex atas saran @ MartinBüttner. Ini cocok dengan 704 pesan berbintang dan tidak cocok dengan 739 pesan tanpa bintang.
The
^.*( ... )
adalah untuk memastikan bahwa selalu ada 0 atau 1 pertandingan, karena Retina output jumlah pertandingan secara default. Anda dapat mencetak skor program pada file input dengan menambahkanm`
untuk mode multiline, kemudian menjalankandan juga untuk
unstarred.txt
.Analisis / penjelasan
Saya membuat cuplikan di atas (dan banyak lagi) menggunakan program, lalu memilih yang saya inginkan secara manual. Inilah beberapa intuisi mengapa potongan di atas bekerja:
C
: CocokPPCG
,@CᴏɴᴏʀO'Bʀɪᴇɴ
E
: Cocok@ETHproductions
,@El'endiaStarman
;
: Karena kotak uji adalah HTML, ini cocok dengan<
dan>
ಠ-ﭏ
: Cocok dengan serangkaian karakter Unicode, paling jelas untukಠ_ಠ
dan@Doorknob冰
tar
: Mencocokkan variasistar
,@El'endiaStarman
(lagi) dan jugagravatar
yang muncul di kotak dialog yang diposting oleh bot posting baruol
: Cocok denganrel="nofollow"
yang ada di banyak tautan dan oneboxl.x
: Cocok@AlexA.
,@trichoplax
eo
: Terutama cocokpeople
, tetapi juga tiga kasus untuk@Geobits
a.u
: Terutama cocokgraduation
,status
,feature
danabuse
pin
: Kecocokanping
dan kata-kata yang berakhir denganping
. Juga cocok dengan beberapa posting dalam diskusi tentangpineapple
, sebagai contoh overfitting.nu
: Cocok dengan campuran kata-kata, yang paling umum adalahnumber
o.f
: Cocokgolf
,conf(irm|use)
"$
: Mencocokkan kutipan ganda sebagai karakter terakhir, mis@phase He means "Jenga."
Tidak
[
ada yang istimewa - saya hanya punya karakter yang tersisa jadi saya pikir saya bisa menggunakannya untuk mencocokkan satu case lagi.sumber
JavaScript ES6, 50 byte, 71,10%
Identifikasi dengan benar 670 berbintang dan 752 tidak berbintang.
Sekarang melintasi 70% penghalang, dan mengalahkan semua orang kecuali Retina!
Kembali
true
jika pesan berisi hal-hal berikut:D
,E
,R
, atauv
;tar
(biasanyastar
);a
danu
dengan satu char di antaranya;l
danx
dengan satu char di antaranya (biasanyaalex
);eo
atauol
;C
, titik koma, atau aಠ
.Berikut adalah beberapa pertandingan yang bermanfaat yang tampaknya tidak layak disingkirkan dari orang lain:
nf
nu
yp
n.m
Ini telah tumbuh semakin dekat dan semakin dekat dengan jawaban Retina, tetapi saya telah menemukan sebagian besar perbaikan sendiri.
Uji di konsol salah satu halaman ini: teks bintang , teks tanpa bintang
Ini versi alternatifnya.
/a/.test
secara teknis fungsi, tetapi tidak memenuhi kriteria kami :Ini skor 71,90% (697 berbintang, 741 tidak berbintang).
Saya telah menjalankan beberapa analisis pada daftar untuk melihat grup regex mana yang cocok dengan postingan yang paling berbintang dan yang paling tidak berbintang. Analisis dapat ditemukan di Intisari ini . Sejauh ini, saya sudah memeriksa
aa
dana.a
mencocokkan.a.u
turun di sekitar # 50 dengan skor 28, namun itu pertandingan paling efisien dari formatnya ...sumber
/regexp/.test()
? Saya pikir mungkin untuk memeras beberapa kasus lagi dengan itu.Pyth, 50 byte, 67,9%
Ini hash input di salah satu dari 322 ember dan memilih Boolean tergantung pada ember itu.
Mencetak gol
sumber
CJam, 45 byte, 65,55%
Ini memeriksa apakah karakter pertama ada dalam daftar tertentu atau jumlah semua poin kode lebih besar dari 8.672.
Mencetak gol
sumber
fold
perintah, bersama dengan jawaban yang sebenarnya.Matlab / Oktaf, 17 byte 60,15%
Klasifikasi 490 pesan dengan benar, 713 pesan sebagai tidak ditatap
Versi sekarang:
Hanya memeriksa panjangnya.
Versi lama:
Dapat diterjemahkan ke bahasa lain mana pun. Itu hanya memeriksa apakah pesan berisi kata-kata bintang atau tidak.
score: 59/911/52.5%
Hasil untuk testcases menggunakan kode ini:
sumber
CJam, 32 byte, Skor keseluruhan 0,5605 (56%).
Mengidentifikasi 428 pesan yang berbintang dengan benar dan 693 pesan yang tidak berbintang. Skor total adalah
(360+730)/2000=0.545
.Tidak berharap untuk menang, saya akan melihat kinerjanya. Di atas adalah kode untuk satu pesan, untuk dijalankan dengan banyak gunakan versi modifikasi ini yang mengembalikan jumlah pesan yang berkilau bintangnya:
Cukup mengujinya dengan STDIN menjadi teks mentah dari kedua file. Mengembalikan nilai true jika pesan berisi "bintang" atau jika
length + 1 mod 4 = 0
.sumber
JavaScript ES6, 0,615 = 61,5%
342 diidentifikasi dengan benar sebagai bintang, 888 dengan benar diidentifikasi sebagai tidak berbintang,
(342+888)/2000 = 0.615
Tes seperti ini pada ini atau ini :
SAYA MASIH MUNGKIN MENDAPATKAN ANDA, CUKUP SAYA!
sumber
Retina, 46 byte, 68,55
679 bintang: 692 tidak berbintang
Beralih ke Retina untuk mendapatkan beberapa regex lagi di ... Masih belum selesai.
sumber
C # 6.0 (.NET Framework 4.6), 50 Bytes, 63,60%
Program yang saya gunakan untuk tujuan pengujian:
sumber