.i xu .e'o lo zunsnagri cu drani loka jboge'a
Diberikan input dari string yang terdiri dari dua karakter, output apakah itu cluster konsonan yang valid di Lojban.
Berikut adalah kutipan dari CLL 3.6 yang merinci aturan untuk pasangan gugus konsonan yang valid (atau lebih tepatnya, yang tidak valid ):
1) It is forbidden for both consonants to be the same, as this would
violate the rule against double consonants.
2) It is forbidden for one consonant to be voiced and the other unvoiced.
The consonants “l”, “m”, “n”, and “r” are exempt from this restriction.
As a result, “bf” is forbidden, and so is “sd”, but both “fl” and “vl”,
and both “ls” and “lz”, are permitted.
3) It is forbidden for both consonants to be drawn from the set “c”, “j”,
“s”, “z”.
4) The specific pairs “cx”, “kx”, “xc”, “xk”, and “mz” are forbidden.
Kutipan referensi konsonan "bersuara" dan "tidak bersuara". Berikut adalah tabel dari konsonan yang tidak disuarakan dan rekan-rekannya yang disuarakan (juga dari CLL 3.6):
UNVOICED VOICED
p b
t d
k g
f v
c j
s z
x -
Perhatikan bahwa {x} tidak memiliki lawan bicara. Untuk kelengkapan, konsonan yang tersisa yang tidak ada dalam daftar ini (yang dapat disuarakan atau tidak disuarakan untuk keperluan kutipan) adalah lmnr
. ( y
adalah vokal, dan huruf-hurufnya
hqw
- tidak digunakan.)
Input harus berupa string tunggal, tetapi Anda dapat mengasumsikan bahwa itu akan selalu terdiri dari tepat dua konsonan, dengan opsional membuntuti baris baru jika diinginkan. Outputnya bisa berupa nilai true atau falsy .
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Kasus uji (semua ini adalah string masukan yang mungkin ditempatkan dalam kategori yang tepat):
Valid consonant clusters:
bd bg bj bl bm bn br bv bz cf ck cl cm cn cp cr ct db dg dj dl dm dn dr dv
dz fc fk fl fm fn fp fr fs ft fx gb gd gj gl gm gn gr gv gz jb jd jg jl jm
jn jr jv kc kf kl km kn kp kr ks kt lb lc ld lf lg lj lk lm ln lp lr ls lt
lv lx lz mb mc md mf mg mj mk ml mn mp mr ms mt mv mx nb nc nd nf ng nj nk
nl nm np nr ns nt nv nx nz pc pf pk pl pm pn pr ps pt px rb rc rd rf rg rj
rk rl rm rn rp rs rt rv rx rz sf sk sl sm sn sp sr st sx tc tf tk tl tm tn
tp tr ts tx vb vd vg vj vl vm vn vr vz xf xl xm xn xp xr xs xt zb zd zg zl
zm zn zr zv
Invalid consonant clusters:
bb bc bf bk bp bs bt bx cb cc cd cg cj cs cv cx cz dc dd df dk dp ds dt dx
fb fd ff fg fj fv fz gc gf gg gk gp gs gt gx jc jf jj jk jp js jt jx jz kb
kd kg kj kk kv kx kz ll mm mz nn pb pd pg pj pp pv pz rr sb sc sd sg sj ss
sv sz tb td tg tj tt tv tz vc vf vk vp vs vt vv vx xb xc xd xg xj xk xv xx
xz zc zf zj zk zp zs zt zx zz
sumber
Jawaban:
Pyth,
534847 byteIni menghasilkan daftar semua pasangan yang tidak valid berdasarkan aturan di atas, kemudian memeriksa apakah input adalah salah satunya.
Coba di sini .
sumber
Retina ,
5957545352 byteLinefeed tambahan sangat penting. Untuk kluster yang valid, ini menghasilkan string yang tidak kosong; untuk yang tidak valid outputnya kosong.
Cobalah online!Ini menguji semua cluster sekaligus (menghapus semua yang tidak valid dan membiarkan semua yang valid tetap utuh). Untuk memungkinkan itu, saya harus mengganti
^
jangkar dengan\b
batas kata.Solusi lain untuk jumlah byte yang sama:
Penjelasan
Tujuannya adalah untuk menghapus semua pasangan yang tidak valid sepenuhnya. Kita dapat melakukan dengan pasangan yang valid apa pun yang kita inginkan selama setidaknya satu karakter tersisa.
Ini menangani tiga aturan:
(.)\1
cocok dengan pasangan mana pun yang melanggar aturan 1.[cjsz]{2}
cocok dengan pasangan mana pun yang melanggar 3.mz
cocok dengan pasangan yang secara khusus tidak diizinkan dari aturan 4.Itu daun hanya memerintah dua dan pasangan tertentu lainnya
xk
,kx
,xc
dancx
. Kami dapat menyimpan banyak byte dengan melakukan beberapa preprocessing sehingga kami harus menangani lebih sedikit kasus:Idenya adalah untuk menghancurkan semua konsonan yang disuarakan menjadi satu, juga
k
danc
. Saya juga berubahf
menjadis
karena kebutuhan. Ini adalah tahap transliterasi yang akan menggantikan karakter individu dengan karakter lain. Untuk melihat pemetaan aktual, kita perlu memperluas jangkauan dan ingat bahwa karakter terakhir dari daftar target diulang tanpa batas waktu:Inisial
f => s
diperlukan, karena mengesampingkan nantif => v
yang akan berubahf
menjadi konsonan bersuara. Kita juga melihat ituc
berubah menjadik
. Dan semua konsonan yang disuarakanbdgjz
diubah menjadiv
. Yang meninggalkanehi
... untungnya ini adalah vokal atau tidak digunakan di Lojban. Hal yang sama juga bisa dicapai denganAtau, periksa solusi lain yang saya posting di atas yang menggunakan transliterasi yang sangat berbeda (dengan rentang terbalik, dan itu juga berubah
k
menjadic
).Sekarang kombinasi yang tidak valid yang tersisa dapat diperiksa lebih mudah:
cx
dancx
telah menjadikx
danxk
jadi kita hanya perlu memeriksa dua kasus sekarang. Untuk aturan 2, kami mencoba untuk mencocokkan seluruh pasangan, mulai dari awal dengan konsonan bersuara opsional (dikurangi menjadiv
), konsonan tanpa suara wajib (di mana kita tidak perlu memeriksaf
danc
secara terpisah) dan konsonan bersuara opsional lainnya. Jika pasangan adalah campuran suara dan tidak disuarakan salah satu dari dua opsionalv
akan cocok dan seluruh pasangan dihapus. Kalau tidak, ini hanya bisa cocok jika pasangan mulai dengan konsonan bersuara (dan memiliki yang lain kedua) - dalam hal ini hanya karakter pertama yang akan dihapus, dan yang lainnya akan tetap, masih memberikan hasil yang benar.sumber