.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
. ( y
Ist ein Vokal und die Buchstaben
hqw
werden 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 Code-Golf , 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
quelle
Antworten:
Pyth,
534847 BytesDadurch wird eine Liste aller ungültigen Paare basierend auf den obigen Regeln erstellt und anschließend überprüft, ob die Eingabe eine davon ist.
Probieren Sie es hier aus .
quelle
Retina ,
5957545352 BytesDer 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\b
Wortgrenze ersetzen .Eine andere Lösung für die gleiche Byteanzahl:
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.
Dies berücksichtigt drei Regeln:
(.)\1
Stimmt mit einem Paar überein, das gegen Regel 1[cjsz]{2}
verstößt.mz
Stimmt 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
,xc
undcx
. Wir können eine Menge Bytes einsparen, indem wir eine Vorverarbeitung durchführen, damit wir weniger Fälle behandeln müssen:Die Idee ist, alle stimmhaften Konsonanten zu einem zusammenzufassen
k
undc
. Ich drehe auchf
ins
aus 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:Die Initiale
f => s
ist notwendig, weil sie die spätere überschreibt, dief => v
sichf
in einen stimmhaften Konsonanten verwandeln würde . Wir sehen auch, dassc
sich das verwandeltk
. Und alle stimmhaften Konsontantenbdgjz
werden in verwandeltv
. Das lässtehi
... zum Glück sind dies entweder Vokale oder werden in Lojban nicht verwendet. Dasselbe hätte auch mit erreicht werden könnenAlternativ 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
k
inc
statt).Jetzt können die verbleibenden ungültigen Kombinationen viel einfacher überprüft werden:
cx
undcx
geworden sindkx
undxk
so 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 aufv
), einem obligatorischen stimmlosen Konsonanten (bei dem wir nicht nachf
undc
getrennt 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 optionalenv
s ü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.quelle