.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
источник
Ответы:
Pyth,
534847 байтовЭто создает список всех недопустимых пар на основе приведенных выше правил, а затем проверяет, является ли ввод одной из них.
Попробуй это здесь .
источник
Retina ,
5957545352 байтаКонечный перевод строки значителен. Для допустимых кластеров это выводит непустую строку; для недействительных вывод пуст.
Попробуйте онлайн! Это проверяет все кластеры одновременно (удаляя все недействительные и оставляя все действительные нетронутыми). Чтобы сделать это возможным, мне пришлось заменить
^
якорь\b
границей слова.Другое решение для того же количества байтов:
объяснение
Цель состоит в том, чтобы полностью удалить все недопустимые пары. Мы можем делать с действительными парами все, что захотим, пока остается хотя бы один символ.
Это касается трех правил:
(.)\1
соответствует любой паре, нарушающей правило 1.[cjsz]{2}
соответствует любой паре, нарушающей 3.mz
соответствует специально запрещенной паре из правила 4.Это оставляет только правило два и другие пары конкретных
xk
,kx
,xc
иcx
. Мы можем сохранить несколько байтов, выполнив некоторую предварительную обработку, поэтому нам нужно обрабатывать меньше случаев:Идея состоит в том, чтобы объединить все озвученные согласные в одну, а также
k
иc
. Я также поворотf
вs
из - за необходимости. Это этап транслитерации, который заменяет отдельные символы на другие символы. Чтобы увидеть фактическое отображение, нам нужно расширить диапазон и запомнить, что последний символ целевого списка повторяется бесконечно:Инициал
f => s
необходим, потому что он перекрывает последний,f => v
который превращаетсяf
в звонкую согласную. Мы также видим, чтоc
превращается вk
. И все озвученные согласныеbdgjz
превращаются вv
. Это оставляетehi
... к счастью, это либо гласные, либо не используемые в ложбане. То же самое можно было бы достичь сВ качестве альтернативы, ознакомьтесь с другим решением, которое я опубликовал выше, в котором используется совсем другая транслитерация (с обратным диапазоном, и вместо этого он также превращается
k
вc
).Теперь оставшиеся недействительные комбинации можно проверить гораздо проще:
cx
иcx
стали,kx
иxk
поэтому нам нужно проверить только два случая сейчас. Для правила 2 мы пытаемся сопоставить всю пару, начиная с начала, с необязательной голосовой согласной (сокращенной доv
), обязательной невокализованной согласной (где мы не должны проверятьf
иc
отдельно) и другой необязательной голосовой согласной. Если пара представляет собой смесь вокализованных и невокализованных, один из двух дополнительныхv
s будет совпадать, и вся пара будет удалена. В противном случае это может совпадать только в том случае, если пара начинается с звонкого согласного (и имеет еще что-нибудь второе) - в этом случае будет удален только первый символ, а другой останется, все еще давая правдивый результат.источник