Kata atau hampir kata?

8

Tulis program atau fungsi yang diberi string (atau padanan bahasa Anda), tentukan apakah string itu kata, atau tidak, dan hasilkan nilai yang benar atau salah.

(Ini bukan duplikat dari Apakah ini bahkan sebuah kata? Kata-kata yang salah dihasilkan dengan cara yang sangat berbeda yang saya percaya membuat ini tantangan yang sama sekali berbeda)

Kata-kata semua akan menjadi huruf kecil, antara 5 dan 10 karakter, dan tidak memiliki tanda kutip.

Kata-kata yang benar adalah bagian yang dipilih secara acak dari daftar kata-kata bahasa Inggris SCOWL (ukuran 50).

Kata-kata yang salah dihasilkan melalui dua metode: swapping dan subtitusi.

Kata-kata "swapping" dihasilkan menggunakan shuffle Fisher-Yates yang dimodifikasi pada huruf kata-kata (nyata) yang dipilih secara acak. Alih-alih bertukar surat setiap kali, surat mungkin atau mungkin tidak ditukar (probabilitas bervariasi, sehingga beberapa kata akan lebih realistis daripada yang lain). Jika kata baru cocok dengan kata yang sudah ada, hasilnya dibuang dan menghasilkan kata lain.

Kata-kata "substitusi" dihasilkan dengan menggunakan metode yang serupa, tetapi alih-alih bertukar surat dengan huruf lain, setiap huruf memiliki peluang untuk diganti dengan huruf acak lain.

Setiap metode digunakan untuk menghasilkan 50% dari kata-kata palsu.

Mencetak gol

Fungsi Anda harus kurang dari 150 byte . Skor ditentukan sebagai berikut:

percentage of answers correct + ((150 - length of program) / 10) 

Aturan

Karena ini berkaitan dengan sejumlah besar kasus uji (setiap daftar kata adalah 1000 kata), program pengujian otomatis baik-baik saja. Penguji otomatis tidak diperhitungkan dalam jangka waktu program; Namun, itu harus diposting sehingga orang lain dapat mengujinya.

  • Tidak ada celah.
  • Tidak ada built-in terkait ejaan / kamus.

Sumber daya

Daftar kata-kata: http://pastebin.com/Leb6rUvt

Daftar bukan kata-kata (diperbarui) : http://pastebin.com/rEyWdV7S

Sumber daya lain (daftar kata SCOWL dan kode yang digunakan untuk menghasilkan kata-kata acak): https://www.dropbox.com/sh/46k13ekm0zvm19z/AAAFL25Z8ogLvXWTDmRwVdiGa?dl=0

Daniel M.
sumber
2
Saya tahu memiliki daftar kata yang tersedia akan mengalahkan titik tantangan, tetapi bagaimana program seharusnya tahu bahwa grit (404 dalam daftar bukan kata) bukan kata, mengingat itu benar-benar satu?
Geobits
2
Jangan salah sangka; Saya tidak suka bubur jagung sama sekali. Mengapa ada orang yang memakannya di luar saya. Tetapi bahkan saya tidak akan sejauh ini menolak kata itu sendiri: P
Geobits
Peringatan yang adil: Saya belum melangkah lebih jauh dari itu dalam daftar, jadi mungkin saja ada yang lain.
Geobits
Beberapa kata non-kata, beberapa sedikit mengaburkan: quais, paves, colic, supermax. (Catatan: Saya senang mengetahui bahwa itu supermaxadalah kata yang sebenarnya)
Sp3000
Yang aneh bahkan menjalankan daftar melalui daftar terbesar SCOWL tidak menangkap salah satu dari itu, meskipun mereka pasti kata-kata. Saya menghasilkan 1000 kata lagi (ada di tautan sumber daya lainnya), dan jika bukan-kata sebenarnya kata, itu akan diganti dengan kata pada daftar alternatif yang memiliki nomor baris yang sama. Sementara itu, saya memperbarui hal pastebin untuk menggunakan kata-kata alternatif untuk kata bukan-kata.
Daniel M.

Jawaban:

8

PHP, 64.9 (50%, 1 byte)

Yah, saya tidak begitu yakin apakah ini jawaban yang bisa diterima, tetapi begini:

1

Jalankan seperti ini:

echo '1' | php -- word

Jelas, untuk daftar kata yang benar dan salah yang sama besar, ini menghasilkan 50% false positive dan 0% false negative, jadi 50% benar. Karena program ini 1 byte, Anda mendapatkan bonus panjang maksimum yang mungkin (terlepas dari jawaban tanpa panjang).

aross
sumber
Menariknya, ini cukup bersaing karena mencetak skor. +1
Addison Crump
6

CJam, 78,6 (78,5%, 149 byte)

l2b0"(1»\]ÁûKëá*ßð%äp`Ï_5ÚY÷:Ä$î ëQXV)­JKÆ¿-(ivHì?{'à\ßÐiCæz°P0ãª/îÏèÄ)WCÅH±Ø^2Ô¥?
î'jJ#OAõ~×cA$[8,ô#~¬#7>"255b2b+=

Cocok dengan 696 kata nyata dan tidak cocok dengan 874 tanpa kata, memberi 1570/2000 = 0.785. Diuji pada juru bahasa online di Chrome - Saya tidak yakin apakah permalink akan berfungsi di Firefox. Jika tidak, string, yang berisi unsintables, dapat diperoleh oleh

[24 40 5 49 25 187 92 93 193 251 158 131 75 235 131 225 42 129 223 240 14 37 228 112 96 207 95 53 218 89 247 58 3 196 3 36 1 238 143 32 235 139 81 15 88 86 41 20 173 74 75 198 191 45 40 105 118 72 236 63 123 39 224 15 15 92 223 208 16 147 105 140 67 16 230 122 176 80 26 48 133 227 148 144 170 47 238 207 232 136 24 196 41 87 132 67 197 72 177 216 94 24 50 212 165 63 10 238 39 106 74 35 79 65 245 126 215 136 6 99 65 36 91 56 44 143 155 150 244 35 126 172 35 55 62]:c

Program ini hanya menginput input dan melakukan pencarian berdasarkan kemungkinan 1077. Saya mencoba bermain golf regex ini, tetapi kata-katanya terlalu dekat dengan kata-kata nyata sehingga tidak berguna.

Cobalah online! | Test suite (rekatkan daftar kata lengkap untuk menghitung jumlah kecocokan)

Sp3000
sumber
1
"Saya mencoba bermain golf regex ini, tetapi kata-katanya terlalu dekat dengan kata-kata yang sebenarnya" -sungguh-sungguh tujuannya
Daniel M.
3

Mathematica, 69,35 (69,35%, 150 byte)

StringContainsQ[" "|##&@@"seaeiislaanreuaooesrtnlneimdiuuosnlrlggtwtwnsdjexexavsvnuvtxsgokcmairlzlzeyatgpnlfiyhtcdxrvmuqtqtmsfohnk"~StringPartition~2]

Penjelasan

Fungsi akan memeriksa apakah kata tersebut berisi pasangan huruf tertentu yang jarang terjadi dalam kata-kata nyata. Jika demikian, fungsinya akan kembali True, menunjukkan bahwa kata itu mungkin bukan kata yang nyata. Misalnya, pasangan "ii"muncul 21 kali dalam daftar bukan kata, sementara tidak terjadi dalam daftar kata.

Tingkat yang benar

Words:      85.4%  
Not words:  53.3%
njpipeorgan
sumber
0

CSharp, 69,85 (57,45%, 26 byte)

"hoeiaunrt".Contains(s[1])

Saya memeriksa apakah huruf kedua dari kata tersebut ada dalam daftar huruf kedua paling populer dalam bahasa Inggris ( dari situs ini ).

Tes otomatis:

static void Main(string[] args)
{
string[] good = System.IO.File.ReadAllLines( @"PATH_GOOD.txt");
string[] bad = System.IO.File.ReadAllLines(@"PATH_BAD.txt");

int counter_good = 0;
int counter_bad = 0;

foreach (string s in good)
{
    if ("hoeiaunrt".Contains(s[1])) counter_good++;
}

foreach (string s in bad)
{
    if (!("hoeiaunrt".Contains(s[1]))) counter_bad++;
}

Console.WriteLine(counter_good);
Console.WriteLine(counter_bad);

Console.ReadLine();
}

Hasil:

828
321

Perhitungan:

(828+321)/20 + 124/10 = 57.45 + 12.4 = 69.85
ivaan
sumber
0

ES6, 76 (67,4%, 64 byte)

Jawaban yang lebih serius kali ini. Ini adalah algoritma yang cukup sederhana. Ini mengembalikan nilai kebenaran ketika karakter kedua kata adalah salah satunya aeinoru. Ini tidak menghasilkan rasio keberhasilan yang jauh lebih baik daripada hanya 1, tetapi masih sangat singkat.

w=>/^[^qxy][aehil-prux]/.test(w)>/[^aeiouy]{3}|[fiopq]$/.test(w)

Tes di sini.

  • +2.7 dengan menambahkan regex untuk menemukan kata dengan 3 atau lebih konsonan berturut-turut dan memerintahnya "non-kata"
  • +0.1 dengan mengganti &!dengan>
  • +1.95 dengan mengecualikan karakter pertama yang paling tidak umum qxy, menambahkan lebih banyak karakter kedua (umum) yang lebih valid untuk mengkompensasi negatif palsu, menghilangkan koma redundan di regex
  • +0.05 dengan mengecualikan kata-kata yang berakhir dengan karakter akhir yang tidak mungkin fiopq
aross
sumber