Ist es ein gültiger Konsonantencluster in Lojban?

13

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


Bei einer Eingabe einer Zeichenfolge aus zwei Zeichen wird ausgegeben, ob es sich in Lojban um einen gültigen Konsonantencluster handelt.

Hier ist ein Zitat aus CLL 3.6, in dem die Regeln für ein gültiges Konsonantenclusterpaar (oder besser gesagt ein ungültiges ) aufgeführt sind:

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.

Das Zitat bezieht sich auf "stimmhafte" und "stimmlose" Konsonanten. Hier ist eine Tabelle der stimmlosen Konsonanten und ihrer stimmhaften Gegenstücke (ebenfalls aus CLL 3.6):

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

Beachten Sie, dass {x} kein stimmhaftes Gegenstück hat. Der Vollständigkeit halber sind die verbleibenden Konsonanten, die nicht auf dieser Liste stehen (die für die Zwecke des Zitats entweder stimmhaft oder stimmlos sein können) lmnr. ( yIst ein Vokal und die Buchstaben hqwwerden nicht verwendet.)

Die Eingabe muss eine einzelne Zeichenfolge sein. Sie können jedoch davon ausgehen, dass sie immer aus genau zwei Konsonanten besteht. Optional können Sie auch eine nachgestellte Newline eingeben. Die Ausgabe kann ein beliebiger wahrer oder falscher Wert sein .

Das ist , also gewinnt der kürzeste Code in Bytes.

Testfälle (dies sind alle möglichen Eingabezeichenfolgen, die in die richtigen Kategorien eingeordnet sind):

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
Türknauf
quelle
Türklinke, das ist sehr nah an codegolf.stackexchange.com/q/66053/15599 Ich denke, dass ungefähr die Hälfte meines Codes wiederverwendbar sein könnte.
Level River St
@steveverrill Richtig, ich habe diese Frage gefunden, und ich dachte, dies wäre ausreichend anders, da Sie nur zwei Zeichen als Eingabe erhalten und nicht mit Vokalen und dergleichen umgehen müssen.
Türklinke
2
@steveverrill ... aber jetzt überlege ich es mir nochmal, nachdem ich mir die Antworten genauer angesehen habe. Glaubst du, es wäre besser, wenn ich den ersten Teil des Konsonantenpaares weglasse und die Herausforderung einfach "Ist dies ein gültiges Konsonantenpaar?"
Türknauf
Ich denke, das würde sowohl den Unterschied zwischen den Herausforderungen vergrößern als auch diesen vereinfachen, was beides gut wäre.
Level River St
@steveverrill Ja, ich stimme jetzt zu. Vielen Dank!
Türknauf

Antworten:

5

Pyth, 53 48 47 Bytes

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

Dadurch wird eine Liste aller ungültigen Paare basierend auf den obigen Regeln erstellt und anschließend überprüft, ob die Eingabe eine davon ist.

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

Probieren Sie es hier aus .

Lirtosiast
quelle
5

Retina , 59 57 54 53 52 Bytes

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

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

Der Zeilenvorschub am Ende ist signifikant. Bei gültigen Clustern wird eine nicht leere Zeichenfolge ausgegeben. für ungültige ist die Ausgabe leer.

Probieren Sie es online! Dadurch werden alle Cluster gleichzeitig getestet (alle ungültigen werden entfernt und alle gültigen bleiben erhalten). Um dies zu ermöglichen, musste ich den ^Anker durch eine \bWortgrenze ersetzen .

Eine andere Lösung für die gleiche Byteanzahl:

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

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

Erläuterung

Ziel ist es, alle ungültigen Paare vollständig zu entfernen. Wir können mit den gültigen Paaren machen, was immer wir wollen, solange mindestens ein Zeichen übrig bleibt.

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

Dies berücksichtigt drei Regeln: (.)\1Stimmt mit einem Paar überein, das gegen Regel 1 [cjsz]{2}verstößt. mzStimmt mit einem Paar überein, das gegen 3 verstößt. Stimmt mit dem ausdrücklich nicht zugelassenen Paar aus Regel 4 überein.

Das Blatt nur zwei und die anderen spezifischen Paare entscheiden xk, kx, xcund cx. Wir können eine Menge Bytes einsparen, indem wir eine Vorverarbeitung durchführen, damit wir weniger Fälle behandeln müssen:

T`fb-jz`svkv

Die Idee ist, alle stimmhaften Konsonanten zu einem zusammenzufassen kund c. Ich drehe auch fin saus der Not. Dies ist eine Transliterationsstufe, bei der einzelne Zeichen durch andere Zeichen ersetzt werden. Um die tatsächliche Zuordnung zu sehen, müssen wir den Bereich erweitern und daran denken, dass das letzte Zeichen der Zielliste auf unbestimmte Zeit wiederholt wird:

fbcdefghijz
svkvvvvvvvv

Die Initiale f => sist notwendig, weil sie die spätere überschreibt, die f => vsich fin einen stimmhaften Konsonanten verwandeln würde . Wir sehen auch, dass csich das verwandelt k. Und alle stimmhaften Konsontanten bdgjzwerden in verwandelt v. Das lässt ehi... zum Glück sind dies entweder Vokale oder werden in Lojban nicht verwendet. Dasselbe hätte auch mit erreicht werden können

T`fcb-jz`skv

Alternativ können Sie die andere Lösung heraus , dass ich gepostet oben , dass eine ganz andere Umschrift verwendet (mit einem Rückwärtsbereich, und es stellt sich auch kin cstatt).

Jetzt können die verbleibenden ungültigen Kombinationen viel einfacher überprüft werden:

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

cxund cxgeworden sind kxund xkso brauchen wir jetzt nur noch zwei Fälle zu prüfen. Für Regel 2 versuchen wir, das gesamte Paar abzugleichen, beginnend mit einem optionalen stimmhaften Konsonanten (reduziert auf v), einem obligatorischen stimmlosen Konsonanten (bei dem wir nicht nach fund cgetrennt suchen müssen ) und einem anderen optionalen stimmhaften Konsonanten. Wenn das Paar aus einer Mischung aus stimmhaften und stimmlosen Stimmen besteht, stimmt eines der beiden optionalen vs überein und das gesamte Paar wird entfernt. Andernfalls kann dies nur zutreffen, wenn das Paar mit einem stimmhaften Konsonanten beginnt (und etwas anderes als den zweiten hat). In diesem Fall wird nur das erste Zeichen entfernt und das andere verbleibt, wobei immer noch ein wahres Ergebnis erzielt wird.

Martin Ender
quelle