(Secara harfiah: "Apakah ini mengikuti / mewujudkan bentuk gismu ?")
Premis
Bahasa Lojban adalah bahasa yang dikonstruksikan , yang berarti sebagian kata-katanya telah dibuat alih-alih dibiarkan berkembang secara alami. Basis semantik Lojban adalah gismu , atau kata-kata dasarnya , yang disintesis dengan menggabungkan akar - akar dari bahasa alami yang banyak digunakan seperti Cina, Hindi, dan Inggris. Semua gismu panjangnya 5 huruf dan mengikuti bentuk ketat tertentu.
Informasi
Untuk tujuan kami, alfabet Lojban adalah:
abcdefgijklmnoprstuvxz
Artinya, alfabet Romawi tanpa hqwy
.
Alfabet ini dapat dibagi menjadi empat kategori:
Vokal
aeiou
Konsonan sonorant
lmnr
Konsonan yang tidak disuarakan
ptkfcsx
. Ketika disuarakan, ini menjadi masing-masing ...Konsonan bersuara
bdgvjz
(Tidak ada konsonan bersuara yang sesuai denganx
.)
Untuk menjadi gismu yang valid, string 5-char-long harus:
Berada dalam salah satu pola konsonan-vokal
CVCCV
atauCCVCV
, di mana C mewakili konsonan, dan V mewakili vokal.Ikuti aturan pencocokan konsonan.
Aturan pencocokan konsonan untuk kata-kata CCVCV:
Dua karakter pertama harus merupakan salah satu dari 48 pasangan berikut ( sumber ):
ml mr
pl pr
bl br
tr tc ts
dr dj dz
kl kr
gl gr
fl fr
vl vr
cl cr cm cn cp ct ck cf
jm jb jd jg jv
sl sr sm sn sp st sk sf
zm zb zd zg zv
xl xr
Perhatikan bahwa ini terlihat lebih baik ketika dipisahkan menjadi pasangan bersuara dan tidak bersuara. Khususnya, setiap pasangan bersuara bersuara valid jika pasangan bersuara bersuara yang sah itu valid. Ini tidak mencakup pasangan dengan konsonan sonorant; cl
valid tetapi jl
tidak.
Aturan pencocokan konsonan untuk kata-kata CVCCV ( sumber ):
Karakter ketiga dan keempat harus mengikuti aturan berikut:
Dilarang untuk kedua konsonan sama [...]
Dilarang untuk satu konsonan disuarakan dan yang lainnya tidak disuarakan. Konsonan "l", "m", "n", dan "r" dibebaskan dari pembatasan ini. Akibatnya, "bf" dilarang, dan begitu pula "sd", tetapi "fl" dan "vl", dan "ls" dan "lz", diizinkan.
Dilarang untuk kedua konsonan diambil dari himpunan "c", "j", "s", "z".
Pasangan spesifik "cx", "kx", "xc", "xk", dan "mz" dilarang.
Perhatikan bahwa ada 179 pasangan yang memungkinkan.
Tantangan
Tentukan apakah string yang diberikan mengikuti aturan pembentukan gismu . Ini adalah kode-golf , jadi solusi terpendek dalam byte menang.
Input : String dengan panjang 5 dari abjad Lojban.
Output : Nilai sebenarnya jika string bisa menjadi nilai gismu dan falsey.
Uji kasus
Sah:
gismu
cfipu
ranxi
mupno
rimge
zosxa
Tidak valid:
ejram
xitot
dtpno
rcare
pxuja
cetvu
Lebih banyak kasus uji: file teks ini berisi semua gismu yang valid, satu per baris.
Saya tidak begitu tahu Lojban, jadi saya curiga terjemahan judulnya salah. Bantuan dihargai.
sumber
s
dank
merupakan bagian dari bahasa, pengucapan apa yangc
dimilikinya?j
tidak diucapkan sebagai bahasa Inggris J, melainkan sebagai bahasa Prancis J (tanpa plosif di awal.) Dari salah satu halaman yang terhubungThe regular English pronunciation of “James”, which is [dʒɛjmz], would Lojbanize as “djeimz.”, which contains a forbidden consonant pair......[additional rule to avoid this]
sehingga kita melihat bahwa plosif D perlu ditambahkan. Unvoiced versi French J memang SH. Simbol IPA (bagi mereka yang memahaminya) ada di halaman wikipedia.Jawaban:
Ruby,
302252 byteBeberapa byte lagi dapat disimpan sebagai berikut:
Inisialisasi
z
ke penggunaan salahz=!c='[cjsztdpbfvkgxmnlr]'
. Ini berfungsi tetapi memberi peringatanwarning: found = in conditional, should be ==
.Ubah dari satu program ke fungsi (saya meninggalkannya sebagai program karena menurut pertanyaan, "program" terpendek dalam byte menang.)
Ringkasan perubahan dari pos pertama
Perombakan besar-besaran regex / bagian yang cocok.
Constant 72 berubah menjadi 69 sehingga kode ASCII terendah dalam string ajaib adalah 10, bukan 13. Ini memungkinkan baris baru literal untuk digunakan dalam versi golf daripada urutan pelarian.
String ajaib
'mzxcxkx'
menggantikan aturan aritmatika untuk 5 karakter yang dilarang dalam tabel jenis CVCCV.versi tanpa ungolfed
menambahkan spasi putih dan mengubah baris baru dalam string ajaib menjadi a
\n
Penjelasan pencocokan
Dua karakter dalam string input
s[n,2]
dibandingkan dengan pasangan karakter dari loop iterating. Jika mereka cocok dan pola regex konsonan-vokal benar, nilaii,j
- nilai baris dan kolom diperiksa untuk validitas. Pemesanan konsonan yang hati-hati membantu di sini.Untuk CVCCV:
Untuk CCVCV
Bitmap untuk setiap kolom dari tabel di bawah ini dikodekan ke dalam string ajaib, yang darinya 69 dikurangkan. Untuk semua kolom kecuali dua kolom terakhir, hanya 6 bit yang diperlukan. Untuk dua yang terakhir, bit urutan yang lebih tinggi harus 1, sehingga angka negatif dihasilkan (karakter
\n
dan:
) agar memiliki 1 yang memimpin, bukan nol yang memimpin. Kami tidak ingin memasukkan tiga baris terakhir dari tabel, jadi alih-alih hakhift dan ANDing oleh 1, kami hakhift dan AND1-j/14
yang biasanya mengevaluasi menjadi 1, tetapi mengevaluasi ke 0 untuk 3 baris terakhir.Program berikut (dengan ekspresi yang sama dengan pengiriman) digunakan untuk menghasilkan tabel di bawah ini (batalkan komentar pada
if
baris mana yang diperlukan untuk tabel yang Anda inginkan.sumber
JavaScript (ES6),
366352 bytePenjelasan
Mengembalikan array yang berisi huruf terakhir (kebenaran) jika itu adalah gismu yang valid atau
null
jika tidak.Banyak ukuran berasal dari pasangan hard-coded
CCVCV
(bahkan setelah kondensasi). Mungkin saja menemukan pola untuk membuatnya, tetapi saya sudah menghabiskan terlalu banyak waktu untuk ini! xDUji
Tampilkan cuplikan kode
sumber
Javascript ES6, 240 byte
Saya kira ini adalah pekerjaan saya sekarang.
sumber