Diberikan string sebagai input, tentukan apakah itu kata benda atau bukan.
Anda akan dinilai berdasarkan 1000 kata bahasa Inggris yang paling umum, dengan berapa banyak Anda benar label sebagai kata benda atau tidak.
Program atau fungsi yang dengan benar mengklasifikasikan sebagian besar kata-kata itu dalam 50 byte atau kurang akan menang.
Kata benda
Kata benda adalah kata yang mewakili sesuatu, biasanya. Itu menjadi lebih kompleks, tapi itu ide dasarnya.
Dalam kasus di mana sebuah kata bisa menjadi kata benda atau bagian lain dari pidato, saya mengklasifikasikannya sebagai kata benda, meskipun itu jarang digunakan. Atau sebenarnya, saya membiarkan situs ini melakukannya untuk saya.
Kata-kata yang akan Anda beri nilai adalah 1000 kata umum ini , yang berasal dari Wikipedia sederhana , dengan "dua" dan "sekali" ditambahkan. Dari mereka, ini adalah 586 kata benda , dan ini adalah 414 kata benda . Anda dapat menemukan ketiga daftar di sini . Perhatikan bahwa semua input ini dalam huruf kecil. Daftar ini adalah final - jangan mencoba untuk memperdebatkan tata bahasa.
Program Anda akan dianggap benar jika output truthy hasil pada input yang merupakan kata benda, dan hasil falsy pada input yang tidak kata benda.
Kehalusan:
Program harus memiliki keluaran deterministik. Jika Anda ingin menggunakan keacakan, bibit itu. Program tidak diizinkan untuk menggunakan daftar kata benda bawaan atau fungsi bagian-suara bawaan lainnya.
Contoh:
a: noun
act: noun
active: noun
about: non-noun
above: non-noun
across: non-noun
Harap tunjukkan berapa tingkat keberhasilan program Anda dalam jawaban Anda. Program atau fungsi paling banyak 50 byte dengan kemenangan tingkat keberhasilan tertinggi. Dalam kasus seri, jumlah byte terendah akan menentukan pemenang. Semoga berhasil!
[bcdf-mp-tvwy]
setara dengan kelas[^aenouxz]
. Perubahan akan menghemat 4 byte, yang dapat dikapitalisasi.[^aenouz]
karena kita tidak memiliki kata yang dimulai dengan ax
.Jelly , 48 byte, skor 731
Ini adalah jawaban pertama saya di Jelly dan saya mengalami banyak kesulitan untuk menyatukan ini. Ah well ... itu tadi menyenangkan. :-)
1 byte disimpan berkat @JonathanAllan
Cobalah online!
Suite pemecahan dan uji
Bagaimana?
Kami pertama menghitung hash dari string input dengan:
Ini membuat kita memiliki indeks dalam [0 ... 255] dan dengan demikian membagi semua kata menjadi 256 grup.
Untuk setiap grup kata, kami menghitung sebelumnya bendera biner yang
1
jika grup tersebut berisi lebih banyak kata benda daripada bukan kata benda, dan0
sebaliknya. Ini mengarah ke angka 256-bit N yang akan kita gunakan sebagai tabel pencarian. Kami menyimpannya sebagai string dasar-250 yang dikodekan.Di bawah ini adalah representasi biner dari N .
Yang bisa disimpan seperti
“Ạ$ⱮẊḲḲLÑMṆụ⁻ẉṂ`ŻvḤæɠ5ṭȯƁU*×TdƲḥ`’
di Jelly.Karena itu kodenya:
sumber
O‘ḅ⁹%⁽€Oæ»4“Ạ$ⱮẊḲḲLÑMṆụ⁻ẉṂ`ŻvḤæɠ5ṭȯƁU*×TdƲḥ`’æ»Ḃ
(perhatikan juga Anda dapat menggunakan footer di TIO, saya akan pergi denganÇ€¬S,L
danǀS,L
untuk dua suite pengujian Anda.JavaScript (ES6), 50 byte, skor 693
Hanya mencari kemungkinan pola yang tidak dimiliki oleh kata benda yang tidak dimiliki oleh kata benda.
Non-kata benda lebih sering mengandung:
Potongan:
Tampilkan cuplikan kode
sumber
/h|n/
(atau dengan melakukan/^.[hn]/.test(s)
), dan yang lain dengan mengubahs[2]>''
salah satu!!s[2]
atau2 in s
.a.p
berlebihan karena Anda sudah memilikinya[aouz]
?[aouz]
cocok hanya ketika pada awal string. Untuk alasan apa pun, pengujian dia.p
mana saja di string meningkatkan skor.Jelly , 50 byte , skor 763
Menggunakan hash sekarang (seperti jawaban Jelly Arnauld )
Cobalah secara Online!
250/414 untuk Non-Nouns
513/586 untuk Nouns
Total = 250 + 513 = 763.
Bagaimana?
Buat tabel dengan 308 entri, baik 1 (mengidentifikasi kata benda) atau 0 (mengidentifikasi bukan kata benda) dan indeks ke dalamnya menggunakan kunci yang disediakan oleh fungsi hash yang memanfaatkan produk dari tata cara kata input:
Sebelumnya:
5047 byte , skor 684Tautan monadik mengambil kata dan mengembalikan daftar satu karakter (kebenaran) jika kata itu diidentifikasi sebagai kata benda, atau daftar kosong atau nol (keduanya falsey) jika tidak.
Cobalah online! (footer melakukan if if pada hasil untuk mencetak
Noun
atauNon-Noun
)... atau lihat program penilaian (menghitung indeks kebenaran di kedua daftar dan kemudian menghitung skor).
Rincian skor: 462/586 kata benda diidentifikasi dengan benar (124 salah), 222/414 kata benda diidentifikasi dengan benar (192 salah) - total benar = 684/1000.
Bagaimana?
Kira itu bukan kata benda jika ...
'be', 'th', 'le', 'he', 'm ', 'ev', 'et', 's ', 'fl', 'ax', 'en', 'fo', 'am', 'az'
(catatan:'m '
dan's '
hanya ada di sini untuk memudahkan kompresi, tetapi keduanya tidak pernah muncul)aenouyz
(meskipun hal ini dilaksanakan terbalik dan dengan huruf kapital berlebih)... karena kata-kata semua memiliki panjang antara 1 dan 11 yang -299 th Indeks setara untuk menggunakan panjang untuk pemetaan indeks:
{7:2; 8:5; 9:7; 11:9; else 1}
13 byte, skor: 638
Pesta cepat pertama (diperpanjang di atas)
sumber
0,-2
tidak berartipair zero with -2
itu berartiliteral [0, -2]
0,-2
nilad, tidak terpisah(0)(,)(-2)
... tentu saja itu efek yang sama dalam kasus ini tetapi tidak selalu. Saya belajar bahwa dengan cara yang sulit ... dan apa pun masalahnya saya lebih suka menjelaskan apa yang sebenarnya terjadi daripada sesuatu dengan efek yang sama atau sesuatu.j
"?pair
ataujoin
jelas cara yang salah untuk mengatakannya, karena0,-2,-6
misalnya tidak berartipair 0 with -2 and then pair that with -6 = [[0, -2], -6]
tetapi lebih berartiliteral [0, -2, -6]
. Saya mengerti,,
atom dan...,...(,...(...))
literalnya membingungkan ... tapi0,-2,-6
tetap saja tidak sama dengan0,-2;-6
karena yang pertama adalah 1 tautan dan yang terakhir adalah 3 tautan.Julia 34bytes, 609
f(w)=hash(w)&0x0800000000004808>0
Saya ingin menghemat karakter dengan menggunakan hash bawaan. Saya merasa harus ada cara untuk melakukan ini dengan lebih baik. Julia tidak cukup ramah dengan operasi bit-banging yang ingin saya gunakan untuk membuat ini lebih baik menurut saya.
Menemukan bitmask yang cocok untuk hash untuk memisahkan mereka, adalah permainan yang menarik.
sumber
Python 2 , 50 byte, akurasi: 596
Cobalah online!
Cukup periksa huruf pertama, panjang, dan apakah "st" ada dalam kata Code mengasumsikan bahwa kata didefinisikan sebagai x (Edit: Terima kasih kepada issacg untuk memperbaiki kode dari snippet ke fungsi)
sumber
Haskell, 36 byte,
626631sumber
length x>2&&(x!!0`notElem`"aenou"||x!!1`elem`"acqrsty")
Implementasi gerbang logika 2 tingkat, bukan 50 byte, skor 1000
Cukup tancapkan representasi biner dari kata yang diberikan ke 88 input
Rangkaian mengembalikan 1 jika kata adalah kata benda, dan mengembalikan 0 jika tidak
Kebutuhan implementasi ini
Beberapa pengukuran
Resolusi penuh Circuit.pdf di sini
Resolusi penuh Circuit.png di sini
sumber
Python 3, 50 byte, skor 602
Python bukan bahasa yang paling verbose, tetapi 50 byte sulit.
sumber