.i xu .e'o lo zunsnagri cu drani loka jboge'a
Biorąc pod uwagę ciąg znaków składający się z dwóch znaków, wypisz, czy jest to poprawny klaster spółgłoskowy w Lojban.
Oto cytat z CLL 3.6 szczegółowo opisujący zasady dotyczące prawidłowej pary klastrów spółgłoskowych (a raczej niepoprawnej ):
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.
Cytat odwołuje się do spółgłosek „dźwięcznych” i „bezdźwięcznych”. Oto tabela bezdźwięcznych spółgłosek i ich dźwięcznych odpowiedników (również z CLL 3.6):
UNVOICED VOICED
p b
t d
k g
f v
c j
s z
x -
Zauważ, że {x} nie ma dźwięcznego odpowiednika. Dla kompletności, pozostałe spółgłoski, których nie ma na tej liście (które mogą być dźwięczne lub bezdźwięczne dla celów cytatu) to lmnr
. ( y
jest samogłoską, a litery
hqw
nie są używane).
Dane wejściowe muszą być pojedynczym ciągiem znaków, ale możesz założyć, że zawsze będzie się składać z dokładnie dwóch spółgłosek, z opcjonalnym końcowym znakiem nowej linii, jeśli chcesz. Wynik może być dowolną wartością prawdziwości lub fałszu .
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
Przypadki testowe (są to wszystkie możliwe ciągi wejściowe umieszczone w odpowiednich kategoriach):
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
źródło
Odpowiedzi:
Pyth,
534847 bajtówTo generuje listę wszystkich nieprawidłowych par na podstawie powyższych reguł, a następnie sprawdza, czy dane wejściowe są jedną z nich.
Wypróbuj tutaj .
źródło
Retina ,
5957545352 bajtyKońcowe podawanie linii jest znaczące. W przypadku prawidłowych klastrów generuje niepusty ciąg; dla nieprawidłowych dane wyjściowe są puste.
Wypróbuj online! Testuje to wszystkie klastry naraz (usuwając wszystkie nieprawidłowe i pozostawiając nietknięte wszystkie ważne). Aby było to możliwe, musiałem zastąpić
^
kotwicę\b
granicą słowa.Inne rozwiązanie dla tej samej liczby bajtów:
Wyjaśnienie
Celem jest całkowite usunięcie wszystkich nieprawidłowych par. Możemy zrobić z prawidłowymi parami, co tylko chcemy, dopóki pozostanie przynajmniej jedna postać.
Dotyczy to trzech zasad:
(.)\1
dopasowuje dowolną parę naruszającą regułę 1.[cjsz]{2}
dopasowuje dowolną parę naruszającą 3.mz
dopasowuje wyraźnie niedozwoloną parę z przepisu 4.Że tylko dwa liście rządzić, a pozostałe pary specyficzne
xk
,kx
,xc
icx
. Możemy zaoszczędzić kilka bajtów, wykonując wstępne przetwarzanie, więc musimy obsłużyć mniej przypadków:Chodzi o to, aby wszystkie dźwięczne spółgłoski były również zwinięte w jedną
k
ic
. Jestem również obracającf
sięs
z konieczności. Jest to etap transliteracji, który zastąpi poszczególne znaki innymi znakami. Aby zobaczyć rzeczywiste mapowanie, musimy rozszerzyć zakres i pamiętać, że ostatni znak listy docelowej jest powtarzany w nieskończoność:Inicjał
f => s
jest konieczny, ponieważ zastępuje późniejszy,f => v
który zamieniłbyf
się w dźwięczną spółgłoskę. Widzimy również, żec
jest zamienionyk
. I wszyscy dźwięczni konsumencibdgjz
są zamieniani wv
. To pozostawiaehi
... na szczęście są to samogłoski lub nieużywane w Lojban. To samo można również osiągnąć za pomocąAlternatywnie, sprawdź inne rozwiązanie, które zamieściłem powyżej, które używa zupełnie innej transliteracji (z odwrotnym zakresem, a zamiast tego zamienia się
k
wc
).Teraz pozostałe nieprawidłowe kombinacje można sprawdzić o wiele łatwiej:
cx
icx
stałykx
, axk
więc musimy tylko sprawdzić teraz dwa przypadki. Dla reguły 2, staramy się dopasować całą parę, począwszy od początku z opcjonalnym spółgłoski dźwięcznej (obniżony dov
), obowiązkową bezdźwięczną spółgłoskę (gdzie nie potrzeba, aby sprawdzićf
ic
osobno) oraz kolejną opcjonalną dźwięczną. Jeśli para jest mieszanką dźwięcznych i bezdźwięcznych, jeden z dwóch opcjonalnych elementówv
zostanie dopasowany, a cała para zostanie usunięta. W przeciwnym razie może się to zgadzać tylko wtedy, gdy para zaczyna się od dźwięcznej spółgłoski (i ma coś jeszcze drugiego) - w takim przypadku tylko pierwszy znak zostanie usunięty, a drugi pozostanie, nadal dając prawdziwy wynik.źródło