ロジバンの有効な子音クラスターですか?


13

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


2文字で構成される文字列の入力が与えられた場合、それがロジバンの有効な子音クラスタであるかどうかを出力します。

ここからの引用である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は使用されません。)

入力は単一の文字列である必要がありますが、常に正確に2つの子音で構成され、必要に応じてオプションで末尾の改行を含むと仮定できます。出力は、任意の真実または偽の値である可能性があります

これはであるため、バイト単位の最短コードが優先されます。

テストケース(これらはすべて適切なカテゴリに配置された入力文字列です):

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文字しか取得できず、母音などを処理する必要がないことを考えると、これは十分に異なると思いました。
ドアノブ

2
@steveverrill ...しかし、答えをよく見てから、今考え直しています。最初の子音ペアの部分を省略し、単に「これは有効な子音ペアですか」という課題を立てた方が良いと思いますか?
ドアノブ

私はそれが挑戦の違いを大きくし、この挑戦​​を単純化するだろうと思う。どちらも良いことだ。
レベルリバーセント

@steveverrillええ、私は今同意します。ありがとう!
ドアノブ

回答:


5

Pyth、53 48 47バイト

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

これにより、上記のルールに基づいてすべての無効なペアのリストが生成され、入力がそれらの1つであるかどうかがチェックされます。

! }                        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つの文字が残っている限り、有効なペアで何でもできます。

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

これにより、3つのルールが処理され(.)\1ます。ルール1に違反するすべてのペアに一致します。3に違反する[cjsz]{2}すべてのペアに一致しますmz

葉は2つだけと他の特定のペアを支配することxkkxxccx。前処理を行うことで大量のバイトを節約できるため、処理するケースを減らす必要があります。

T`fb-jz`svkv

アイデアは、同様に、1にすべての有声子音を崩壊しているkc。私も必死fになっsています。これは、個々の文字を他の文字に置き換える文字変換段階です。実際のマッピングを確認するには、範囲を拡張し、ターゲットリストの最後の文字が無期限に繰り返されることを覚えておく必要があります。

fbcdefghijz
svkvvvvvvvv

イニシャルf => sは、有声子音にf => v変わる後者をオーバーライドするため、必要fです。また、それcがに変わることもわかりkます。そしてすべての有声子音bdgjzはに変わりvます。葉はそれehi...幸いにもこれらはロジバンで母音または未使用のいずれかです。同じことが達成された可能性もあります

T`fcb-jz`skv

別の方法として、非常に異なる音訳を使用する上記の別のソリューションをチェックしてください(逆の範囲で、また kc代えて)。

残りの無効な組み合わせをより簡単に確認できるようになりました。

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

cxそしてcxなったのでkxxk今は2つのケースをチェックするだけです。ルール2については、我々は(に縮小オプション有声子音と先頭から、全体のペアを一致させようv、)(私たちがチェックする必要はありません必須無声子音fc別途)と、別の任意の有声子音を。ペアが有声音と無声音の混合である場合、2つのオプションvのいずれかが一致し、ペア全体が削除されます。それ以外の場合、これはペアが有声子音で始まる場合にのみ一致します(そして他に何かがあります)-その場合、最初の文字のみが削除され、他の文字はそのまま残り、真実の結果が得られます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.