这是Lojban中有效的辅音词组吗?


13

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


给定输入由两个字符组成的字符串,输出是否在Lojban中是有效的辅音簇。

这是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

门把手,这非常接近codegolf.stackexchange.com/q/66053/15599,我认为我一半的代码可能是可重用的。
水平河圣

@steveverrill是的,我发现了这个问题,我认为这将有足够的不同,因为您只需输入两个字符,而不必处理元音等。
门把手

2
@steveverrill ...但是在仔细研究答案之后,我现在正在重新考虑。您是否认为如果我省略最初的辅音对部分,然后简单地提出挑战“这是一个有效的辅音对”会更好吗?
Doorknob

我认为这将既增加挑战之间的差异,又简化这一挑战,两者都是一件好事。
级圣河

@steveverrill是的,我现在同意。谢谢!
Doorknob

Answers:


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中明确禁止的对。

这使得只能治两其它特定对xkkxxccx。我们可以通过进行一些预处理来节省大量字节,因此我们只需处理更少的情况:

T`fb-jz`svkv

这个想法是把所有浊辅音折叠成一个,以及kc。我也转fs了必要性。这是音译阶段,它将各个字符替换为其他字符。要查看实际映射,我们需要扩大范围并记住目标列表的最后一个字符会无限期重复:

fbcdefghijz
svkvvvvvvvv

初始字母f => s是必要的,因为它会覆盖后面的字母f => v,后者会变成f浊音辅音。我们也看到c变成了k。并且所有带语音的辅音bdgjz都变成了v。留下ehi...幸运的是,这些在Lojban中要么是元音,要么未使用。同样也可以实现

T`fcb-jz`skv

另外,请查看我上面发布的另一种解决方案,该解决方案使用非常不同的音译(具有相反的音域,并且也变成kc)。

现在,可以更轻松地检查其余无效组合:

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

cx并且cx已经变得如此kxxk所以我们现在只需要检查两个案例。对于规则2,我们尝试匹配整个对,从一个可选的浊辅音(降低到起点开始v),强制清辅音(在这里我们并不需要检查fc独立)和另一个可选的浊辅音。如果一对是有声和无声的混合,则两个可选vs中的一个将匹配,并且整个对将被删除。否则,只有当一对以浊音辅音开头(并且还有其他第二个)时,这才可以匹配-在这种情况下,仅第一个字符将被删除,而另一个将保留,仍然给出真实的结果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.