.i xu .e'o lo zunsnagri cu drani loka jboge'a
Étant donné l'entrée d'une chaîne composée de deux caractères, indiquez s'il s'agit d'un cluster de consonnes valide dans Lojban.
Voici une citation de CLL 3.6 détaillant les règles pour une paire de grappes de consonnes valides (ou plutôt une paire invalide ):
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.
La citation fait référence à des consonnes "voisées" et "non voisées". Voici un tableau des consonnes non voisées et de leurs homologues voisées (également de CLL 3.6):
UNVOICED VOICED
p b
t d
k g
f v
c j
s z
x -
Notez que {x} n'a pas d'homologue exprimé. Pour être complet, les consonnes restantes qui ne figurent pas sur cette liste (qui peuvent être exprimées ou non aux fins de la citation) le sont lmnr
. ( y
est une voyelle, et les lettres
hqw
ne sont pas utilisées.)
L'entrée doit être une seule chaîne, mais vous pouvez supposer qu'elle sera toujours composée exactement de deux consonnes, avec un retour à la ligne facultatif si vous le souhaitez. La sortie peut être n'importe quelle valeur vraie ou fausse .
Il s'agit de code-golf , donc le code le plus court en octets l'emporte.
Cas de test (ce sont toutes les chaînes d'entrée possibles placées dans les catégories appropriées):
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
la source
Réponses:
Pyth,
534847 octetsCela génère une liste de toutes les paires non valides en fonction des règles ci-dessus, puis vérifie si l'entrée en fait partie.
Essayez-le ici .
la source
Rétine ,
5957545352 octetsLe saut de ligne arrière est important. Pour les clusters valides, cela génère une chaîne non vide; pour les invalides, la sortie est vide.
Essayez-le en ligne! Cela teste tous les clusters à la fois (en supprimant tous les clusters invalides et en laissant intacts tous les clusters valides). Pour rendre cela possible, j'ai dû remplacer l'
^
ancre par une\b
limite de mot.Une autre solution pour le même nombre d'octets:
Explication
Le but est de supprimer complètement toutes les paires invalides. Nous pouvons faire avec les paires valides tout ce que nous voulons tant qu'il reste au moins un caractère.
Cela prend en charge trois règles:
(.)\1
correspond à toute paire violant la règle 1.[cjsz]{2}
correspond à toute paire violant 3.mz
correspond à la paire spécifiquement interdite de la règle 4.Cela laisse règle que deux et les autres paires spécifiques
xk
,kx
,xc
etcx
. Nous pouvons économiser un tas d'octets en effectuant un prétraitement, nous devons donc gérer moins de cas:L'idée est de regrouper toutes les consonnes vocales en une seule, ainsi
k
quec
. Je tourne aussif
danss
la nécessité. Il s'agit d'une étape de translittération qui remplacera les caractères individuels par d'autres caractères. Pour voir le mappage réel, nous devons étendre la plage et nous rappeler que le dernier caractère de la liste cible est répété indéfiniment:L'initiale
f => s
est nécessaire, car elle remplace la dernièref => v
qui se transformeraitf
en une consonne vocale. Nous voyons aussi que celac
se transformek
. Et tous les correspondants exprimésbdgjz
sont transformés env
. Cela laisseehi
... heureusement, ce sont des voyelles ou inutilisées en Lojban. La même chose aurait également pu être obtenue avecAlternativement, consultez l'autre solution que j'ai postée ci-dessus qui utilise une translittération très différente (avec une plage inverse, et elle se transforme également
k
en à lac
place).Maintenant, les combinaisons non valides restantes peuvent être vérifiées beaucoup plus facilement:
cx
etcx
sont devenuskx
etxk
nous avons donc seulement besoin de vérifier deux cas maintenant. Pour la règle 2, nous essayons de faire correspondre la paire entière, en commençant par le début avec une consonne vocale facultative (réduite àv
), une consonne non vocale obligatoire (où nous n'avons pas besoin de vérifierf
etc
séparément) et une autre consonne vocale facultative. Si la paire est un mélange de voix et de voix, l'un des deuxv
s optionnels correspondra et la paire entière sera supprimée. Sinon, cela ne peut correspondre que si la paire commence par une consonne voisée (et a autre chose que la seconde) - dans ce cas, seul le premier caractère sera supprimé et l'autre restera, donnant toujours un résultat véridique.la source