Đây có phải là cụm phụ âm hợp lệ trong Lojban không?


13

.i xu .e'o lo zunnagri cu drani loka jboge'a


Đưa ra một đầu vào của một chuỗi bao gồm hai ký tự, đầu ra cho dù đó là cụm phụ âm hợp lệ trong Lojban.

Dưới đây là trích dẫn từ CLL 3.6 nêu chi tiết các quy tắc cho cặp cụm phụ âm hợp lệ (hay đúng hơn là không hợp lệ ):

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.

Các trích dẫn tham khảo phụ âm "lồng tiếng" và "không có tiếng vang". Dưới đây là bảng các phụ âm không được phát âm và các đối tác phát âm của họ (cũng từ CLL 3.6):

UNVOICED    VOICED
   p          b
   t          d
   k          g
   f          v
   c          j
   s          z
   x          -

Lưu ý rằng {x} không có đối tác lồng tiếng. Để đầy đủ, các phụ âm còn lại không có trong danh sách này (có thể được phát âm hoặc không được truyền đạt cho mục đích của trích dẫn) lmnr. ( ylà một nguyên âm và các chữ cái hqwkhông được sử dụng.)

Đầu vào phải là một chuỗi đơn, nhưng bạn có thể cho rằng nó sẽ luôn bao gồm chính xác hai phụ âm, với dòng mới tùy chọn nếu bạn muốn. Đầu ra có thể là bất kỳ giá trị trung thực hoặc giả .

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng.

Các trường hợp thử nghiệm (đây là tất cả các chuỗi đầu vào có thể được đặt trong các danh mục phù hợp):

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

Doorknob, cái này rất gần với codegolf.stackexchange.com/q/66053/15599 Tôi nghĩ rằng khoảng một nửa mã của tôi có thể được sử dụng lại.
Cấp sông St

@steveverrill Đúng, tôi đã tìm thấy câu hỏi đó và tôi nghĩ rằng điều này sẽ đủ khác nhau nếu bạn chỉ lấy hai ký tự làm đầu vào và bạn không phải xử lý nguyên âm và như vậy.
Doorknob

2
@steveverrill ... nhưng bây giờ tôi đang xem xét lại, sau khi xem xét kỹ hơn các câu trả lời. Bạn có nghĩ sẽ tốt hơn nếu tôi bỏ qua phần cặp phụ âm đầu tiên và thực hiện thử thách đơn giản là "đây có phải là một cặp phụ âm hợp lệ" không?
Doorknob

Tôi nghĩ rằng cả hai sẽ làm tăng sự khác biệt giữa các thử thách và đơn giản hóa thử thách này, cả hai đều là một điều tốt.
Cấp sông St

@steveverrill Vâng, tôi đồng ý ngay bây giờ. Cảm ơn!
Doorknob

Câu trả lời:


5

Pyth, 53 48 47 byte

!}z+"mz"s.pMs[+VGGc"xcxkcsjz"2*"ptkfcsx""bdgvjz

Điều này tạo ra một danh sách tất cả các cặp không hợp lệ dựa trên các quy tắc ở trên, sau đó kiểm tra xem đầu vào có phải là một trong số chúng không.

! }                        A not in B
    z                      input
    +
      "mz"                  "mz"
      s                    flattened
        .pM                permutations of each:
            s [               flatten the three-element array:
                +V              Alphabet vectorized concat with itself.
                   G            That is, duplicate letters
                   G
                c"xcxkcsjz"2     That string chopped every 2
                *               outer product of
                  "ptkfcsx"      voiced letters
                  "bdgvjz        and unvoiced letters

Hãy thử nó ở đây .


5

Võng mạc , 59 57 54 53 52 byte

(.)\1|[cjsz]{2}|mz

T`fb-jz`svkv
kx|xk|^v?[kpstx]v?

Các linefeed trailing là đáng kể. Đối với các cụm hợp lệ, điều này xuất ra một chuỗi không trống; Đối với những người không hợp lệ, đầu ra là trống rỗng.

Hãy thử trực tuyến! Điều này kiểm tra tất cả các cụm cùng một lúc (loại bỏ tất cả các cụm không hợp lệ và giữ nguyên tất cả các cụm hợp lệ). Để làm được điều đó, tôi đã phải thay thế ^mỏ neo bằng một \branh giới từ.

Một giải pháp khác cho cùng số byte:

(.)\1|[cjsz]{2}|mz

T`fk-dbz`scv
cx|xc|^v?[cpstx]v?

Giải trình

Mục tiêu là loại bỏ hoàn toàn tất cả các cặp không hợp lệ. Chúng ta có thể làm với các cặp hợp lệ bất cứ điều gì chúng ta muốn miễn là vẫn còn ít nhất một ký tự.

(.)\1|[cjsz]{2}|mz

Điều này quan tâm đến ba quy tắc: (.)\1khớp với bất kỳ cặp nào vi phạm quy tắc 1. [cjsz]{2}khớp với bất kỳ cặp nào vi phạm 3. mzkhớp với cặp không được phép cụ thể từ quy tắc 4.

Đó lá chỉ cai trị hai và các cặp cụ thể khác xk, kx, xccx. Chúng ta có thể lưu một loạt byte bằng cách thực hiện một số tiền xử lý để chúng ta phải xử lý ít trường hợp hơn:

T`fb-jz`svkv

Ý tưởng là thu gọn tất cả các phụ âm phát âm thành một, kc. Tôi cũng đang biến fthành sra cần thiết. Đây là giai đoạn chuyển ngữ sẽ thay thế các ký tự riêng lẻ cho các ký tự khác. Để xem ánh xạ thực tế, chúng ta cần mở rộng phạm vi và nhớ rằng ký tự cuối cùng của danh sách đích được lặp lại vô thời hạn:

fbcdefghijz
svkvvvvvvvv

Chữ cái đầu tiên f => slà cần thiết, bởi vì nó ghi đè lên phần sau f => vsẽ biến fthành phụ âm phát âm. Chúng tôi cũng thấy rằng cđược biến thành k. Và tất cả các consontants lên tiếng bdgjzđược biến thành v. Điều đó khiến ehi... may mắn thay, đây là những nguyên âm hoặc không được sử dụng trong Lojban. Điều tương tự cũng có thể đạt được với

T`fcb-jz`skv

Ngoài ra, hãy kiểm tra giải pháp khác mà tôi đã đăng ở trên sử dụng cách chuyển ngữ rất khác (với phạm vi đảo ngược và nó cũng biến kthành cthay thế).

Bây giờ các kết hợp không hợp lệ còn lại có thể được kiểm tra dễ dàng hơn nhiều:

kx|xk|^v?[kpstx]v?

cxcxđã trở thành kxxkvì vậy chúng tôi chỉ cần kiểm tra hai trường hợp bây giờ. Đối với quy tắc 2, chúng tôi cố gắng khớp toàn bộ cặp, bắt đầu từ đầu với một phụ âm phát âm tùy chọn (rút gọn thành v), một phụ âm không có âm bắt buộc (trong đó chúng tôi không cần kiểm tra fctách riêng) và một phụ âm phát âm tùy chọn khác. Nếu cặp này là hỗn hợp của tiếng nói và không có sóng, một trong hai tùy chọn vsẽ khớp và toàn bộ cặp được loại bỏ. Mặt khác, điều này chỉ có thể khớp nếu cặp bắt đầu bằng một phụ âm có tiếng (và có bất cứ thứ gì khác thứ hai) - trong trường hợp đó, chỉ có ký tự đầu tiên sẽ bị xóa, và ký tự còn lại sẽ vẫn cho kết quả trung thực.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.