Anda harus menulis program atau fungsi yang menggunakan string 4-karakter sebagai input dan menghasilkan nilai yang menunjukkan apakah string tersebut merupakan kata bahasa Inggris atau bukan. Anda diizinkan untuk membuat kesalahan dalam 15% dari testcases yang disediakan.
Detail input:
Input adalah string 4-karakter yang hanya berisi huruf kecil bahasa Inggris (az).
Rincian keluaran:
Jika input adalah kata bahasa Inggris Anda harus mengeluarkan boolean true
atau integer 1
.
Jika input bukan kata bahasa Inggris, Anda harus mengeluarkan boolean false
atau integer 0
.
Daftar kata
daftar 4 kata kata bahasa Inggris (2236 kata)
daftar 4-string non-kata (2236 string)
Daftar non-kata berisi urutan huruf yang dihasilkan secara acak secara acak dengan kata-kata yang sebenarnya dihapus darinya.
Pengujian
Program atau fungsi Anda seharusnya membuat tidak lebih dari 15% kesalahan pada daftar kata yang diberikan bersama-sama. Itu berarti Anda dapat memberikan output yang salah untuk 670 dari 4472 input yang disediakan.
Anda juga harus memposting program atau fungsi pengujian sehingga orang lain dapat memeriksa jawaban Anda. Durasi program pengujian Anda tidak termasuk dalam skor pengiriman Anda.
Celah standar tidak diijinkan.
Program Anda tidak boleh menggunakan sumber eksternal apa pun, misalnya mengakses web atau membaca dari file.
Ini adalah kode-golf sehingga program atau fungsi terpendek menang.
sumber
Jawaban:
Ruby, 29 byte
Mudah-mudahan saya sudah benar - ini pemrograman pertama saya di Ruby. Sebenarnya saya melakukan semua pengujian dengan Python, tetapi
import re
terlalu lama bagi saya.Ini adalah fungsi anonim yang mengambil string dan output yang
true/false
sesuai. Menggunakan regex yang mencari salah satu dari dua hal berikut:jqxz
Jika salah satu dari ini ada, kami mengklasifikasikan input sebagai bukan kata.
Fungsi ini cocok dengan 2030 kata (salah gagal pada 206) dan gagal pada 1782 tanpa kata (salah mencocokkan 454), dengan total 660 kesalahan klasifikasi. Diuji pada ideone .
Terima kasih kepada @ MartinBüttner untuk bantuan Ruby. Martin juga menunjukkan bahwa suatu program penuh membutuhkan jumlah byte yang sama:
Juga terima kasih kepada user20150203 untuk menyederhanakan regex.
Ruby,
15861488134912881203 byteUntuk bonus, inilah fungsi dengan regex yang jauh lebih lama:
Saya ingin menunjukkan bahwa regex masih bisa mengalahkan kompresi, jadi yang satu ini mengklasifikasikan setiap case dengan benar . Regex itu sendiri agak mirip peluruhan eksponensial - bit pertama cocok dengan banyak kata-kata, kemudian setiap bit setelah pertandingan semakin sedikit dan semakin sedikit sampai saya menyerah dan hanya menyatukan sisanya (sekitar 200 atau lebih) pada akhirnya. Beberapa yang tersisa tampak mengejutkan seperti kata-kata nyata (seperti
chia
yang merupakan kata).Saya melemparkan regex ke pembersih golf regex saya yang saya tulis untuk tantangan lain - golf sekitar 300 byte sebelum saya harus mencoba mengacak-acak barang secara manual. Masih ada sedikit yang adil untuk bermain golf.
sumber
->s{!s[/[^aeiou]{3}|[jqxz]/]}
hanya memiliki 29 byte dan cocok dengan 2030 kata (salah gagal pada 206) dan gagal pada 1782 non -words (salah mencocokkan 454), dengan total 660 kesalahan klasifikasi. "v
. Terima kasih user20150203!Groovy,
7774Saya menulis program pengujian di Jawa, yang dapat Anda temukan di Gist on Github ini. Ini adalah output dari program pengujian saya:
(Gagal 629 kasus uji)
PS Saya pikir ini akan segera berakhir masalah golf regex ...
Jika jawaban Sp3000 (fungsi) akan dikonversi ke Groovy, maka akan berakhir dengan jumlah karakter yang sama. Seperti fungsi bernama:
atau fungsi yang tidak disebutkan namanya:
sumber
Javascript, 1626 byte:
Saya ingin mencari solusi yang untuk setiap karakter memiliki petunjuk yang mungkin akan muncul setelahnya. Tidak sesingkat itu, tetapi tidak ada regex dan hasil yang cukup baik (kata-kata: 101 kesalahan, non-kata, 228 kesalahan)
Berikut ini adalah implementasi yang berfungsi http://fiddle.jshell.net/jc73sjyn/
Singkatnya: Objek g menampung karakter dari a hingga z (sebagai kunci), dan untuk masing-masingnya, ada satu set karakter (juga sebagai kunci) yang masing-masing mewakili karakter yang mungkin muncul setelahnya, beserta persentase probabilitasnya . Jika tidak ada objek, tidak ada probabilitas.
3 skor (4 huruf -> 3 evaluasi) dikalikan, dan kata dengan skor 60 ke atas dianggap sebagai kata nyata.
Contoh: untuk kata 'cope' ada tiga pencarian:
g [c] [o] = 20
g [o] [p] = 5
g [p] [e] = 20
skor = 20 * 5 * 20 = 2000, yang lebih dari 60, sehingga yang valid.
(Saya cukup baru dengan javascript, jadi mungkin ada cara untuk membuatnya lebih pendek yang saya tidak tahu.)
EDIT TERAKHIR:
Benar-benar tidak relevan sekarang, tetapi saya mengevaluasi jalan saya ke g yang lebih benar:
Hasil baru:
kata: 53 kesalahan, non-kata: 159 kesalahan
http://fiddle.jshell.net/jc73sjyn/2/
sumber
for
loop Anda .w=>
denganfunction(w)
dan itu akan berfungsi untuk setiap browser.Python 2, 5254 byte
Solusi ini memisahkan kata-kata baik menjadi dua bagian. Pencarian pertama memeriksa 2 karakter pertama untuk menemukan string yang tepat, kemudian mencari 2 karakter kedua dalam string itu. Tidak terlalu ringkas, tetapi cepat untuk menulis. Metode ini cocok dengan setiap kata tanpa kesalahan.
sumber
C # WPF, 110
139Singkat
Jawaban lama
sumber
var
dan tidak memperkenalkan variabel kecuali diperlukan.Word VBA, 25 Bytes
Fungsi jendela langsung VBE anonim yang mengambil input sebagai pilihan saat ini dan menghasilkan jika itu adalah kata sebagai boolean ke jendela langsung VBE.
Fungsi Penguji
Fungsi di bawah ini digunakan untuk menguji fungsi di atas terhadap testcases. Fungsi gagal 9,07 persen dari kasus (396 dari kata-kata aktual dan 10 dari kata-kata palsu)
sumber
Mathematica, 33 byte
Hei, seseorang harus melakukannya!
Cukup jelas.
sumber
Javascript ES6, 32 byte:
Menggunakan regex dari @ Sp3000 jawab :
Ini menciptakan fungsi anonim. Untuk menggunakannya, Anda cukup membungkusnya
()
.Contoh:
Ini memiliki tingkat kegagalan yang persis sama dengan @ Sp3000, dan kembali
true
ataufalse
sesuai.Semua kredit karena @ Sp3000 karena mengizinkan saya menggunakan regex-nya.
sumber
F = function(s) { return /[^aeiou]{3}|[jqxz]/.test(s) }
.