Це дійсний приголосний скупчення в Лойбані?


13

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


З урахуванням введення рядка, що складається з двох символів, виведіть, чи це дійсний приголосний кластер у Лойбані.

Ось цитата з CLL 3.6 з деталізацією правил для дійсної приголосної пари кластерних груп (а точніше, недійсної ):

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.

Посилання на цитати "приголосні" та "незвучні" приголосні. Ось таблиця незголосних приголосних та їх озвучених аналогів (також із CLL 3.6):

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

Зауважте, що {x} не має озвученого аналога. Для повноти залишилися приголосні, які відсутні в цьому списку (які можуть бути або озвучені, або озвучені для цілей цитати) lmnr. ( yє голосною, а букви hqwне вживаються.)

Вхід повинен бути одним рядком, але ви можете припустити, що він завжди буде складатися з рівно двох приголосних, за бажанням, заздалегідь прокладеним новим рядком. Вихід може бути будь-яким правильним або хибним значенням .

Це , тому виграє найкоротший код у байтах.

Тестові приклади (це всі можливі вхідні рядки, розміщені у відповідних категоріях):

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, це дуже близько до codegolf.stackexchange.com/q/66053/15599 Я думаю, що близько половини мого коду може бути багаторазовим.
Річка Рівня Св.

@steveverrill Правильно, я знайшов це питання, і я вважав, що це буде досить різним, враховуючи, що ви вводите лише два символи як вхідні дані, і вам не потрібно обробляти голосні і подібні.
Дверна ручка

2
@steveverrill ... але зараз я переглядаю, уважніше вивчивши відповіді. Як ви вважаєте, було б краще, якби я лише залишив початкову частину приголосної пари і зробив виклик просто "чи це дійсна приголосна пара"?
Дверна ручка

Я думаю, що це збільшить різницю між викликами та спростить цю проблему, і це було б хорошою справою.
Річка Рівня Св.

@steveverrill Так, я згоден зараз. Спасибі!
Дверна ручка

Відповіді:


5

Pyth, 53 48 47 байт

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

Це генерує список усіх недійсних пар на основі наведених вище правил, а потім перевіряє, чи є вхід одним із них.

! }                        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

Спробуйте тут .


5

Сітківка , 59 57 54 53 52 байт

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

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

Подача підводного каналу є значною. Для дійсних кластерів це виводить не порожній рядок; для недійсних - вихід порожній.

Спробуйте в Інтернеті! Це перевіряє всі кластери одразу (видаляючи всі недійсні та залишаючи недоторканими всі дійсні). Щоб зробити це можливим, мені довелося замінити ^якір на \bмежу слова.

Ще одне рішення для тієї ж кількості байтів:

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

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

Пояснення

Мета - видалити всі недійсні пари повністю. Ми можемо робити з дійсними парами все, що завгодно, поки залишається хоча б один символ.

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

Це стосується трьох правил: (.)\1відповідає будь-якій парі, яка порушує правило 1. [cjsz]{2}відповідає будь- якій парі, яка порушує правило 3. mzвідповідає збірці із забороненою парою з правила 4.

Це залишає тільки правило два і інші пари конкретних xk, kx, xcі cx. Ми можемо зберегти купу байтів, виконавши попередню обробку, тому нам доведеться обробляти менше випадків:

T`fb-jz`svkv

Ідея полягає в тому, щоб зібрати всі озвучені приголосні в одне, а також kі c. Я також перетворююсь fна sнеобхідність. Це етап транслітерації, який замінить окремих символів іншими символами. Щоб побачити фактичне відображення нам потрібно розширити діапазон і пам’ятати, що останній символ списку цілі повторюється нескінченно:

fbcdefghijz
svkvvvvvvvv

Початкове f => sє необхідним, оскільки воно переосмислює пізніше, f => vяке перетвориться fна дзвінкий приголосний. Ми також бачимо, що cце перетворюється на k. І всі озвучені константи bdgjzперетворюються на v. Це залишає ehi... на щастя, це або голосні, або невикористані в Лойбані. Те ж саме можна було досягти і з

T`fcb-jz`skv

Як альтернативи, перевірити інше рішення я відправив вище , який використовує дуже різні транслітерації (з зворотним діапазоні, і воно також перетворюється kв cзамість цього).

Тепер інші недійсні комбінації можна перевірити набагато простіше:

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

cxі cxстали , kxі xkтому нам потрібно тільки перевірити два випадки в даний час. Для правила 2 ми намагаємось зіставити всю пару, починаючи з початку з необов'язковим приголосним приголосним (зведеним до v), обов'язковим незвуковим приголосним (де нам не потрібно перевіряти fта cокремо) та іншим необов'язковим голосним приголосним. Якщо пара є сумішшю озвученого та беззвучного, один із двох необов'язкових vs буде відповідати, і вся пара буде видалена. В іншому випадку це може збігатися лише в тому випадку, якщо пара починається з озвученого приголосного (і має що-небудь ще друге) - у такому випадку буде видалено лише перший символ, а другий залишиться, все ще даючи простий результат.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.