(Literalmente: "¿Esto sigue / se da cuenta de la forma gismu ?")
Premisa
El lenguaje Lojban es un lenguaje construido , lo que significa en parte que todas sus palabras se han creado en lugar de permitir que se desarrollen naturalmente. La base semántica de Lojban son sus gismu , o palabras raíz, que se sintetizaron combinando raíces de lenguas naturales ampliamente habladas como el chino, el hindi y el inglés. Todos los gismu tienen 5 letras de largo y siguen una cierta forma estricta.
Información
Para nuestros propósitos, el alfabeto lojban es:
abcdefgijklmnoprstuvxz
Es decir, el alfabeto romano sin hqwy
.
Este alfabeto se puede dividir en cuatro categorías:
Vocales
aeiou
Consonantes sonoras
lmnr
Consonantes sordas
ptkfcsx
. Cuando se expresa, estos se convierten respectivamente en ...Consonantes sonoras
bdgvjz
(ninguna consonante sonora corresponde ax
).
Para ser un gismu válido, una cadena de 5 caracteres debe:
Estar en uno de los patrones de vocal consonante
CVCCV
oCCVCV
, donde C representa una consonante y V representa una vocal.Siga las reglas de correspondencia de consonantes.
Reglas de coincidencia de consonantes para palabras CCVCV:
Los primeros dos caracteres deben constituir uno de los siguientes 48 pares ( fuente ):
ml mr
pl pr
bl br
tr tc ts
dr dj dz
kl kr
gl gr
fl fr
vl vr
cl cr cm cn cp ct ck cf
jm jb jd jg jv
sl sr sm sn sp st sk sf
zm zb zd zg zv
xl xr
Tenga en cuenta que esto se ve bastante mejor cuando se separa en pares con voz y sin voz. En particular, cada par sonoro-sonoro es válido si el par sordo-sonoro correspondiente es válido. Esto no se extiende a pares con una consonante sonora; cl
es válido pero jl
no lo es.
Reglas de coincidencia de consonantes para palabras CVCCV ( fuente ):
El tercer y cuarto caracteres deben seguir las siguientes reglas:
Está prohibido que ambas consonantes sean iguales [...]
Está prohibido que una consonante se exprese y la otra no se exprese. Las consonantes "l", "m", "n" y "r" están exentas de esta restricción. Como resultado, "bf" está prohibido, y también lo está "sd", pero se permiten tanto "fl" como "vl", y "ls" y "lz".
Está prohibido que ambas consonantes se extraigan del conjunto "c", "j", "s", "z".
Los pares específicos "cx", "kx", "xc", "xk" y "mz" están prohibidos.
Tenga en cuenta que hay 179 pares posibles.
Reto
Determine si la cadena dada sigue las reglas de formación de gismu . Este es el código de golf , por lo que gana la solución más corta en bytes.
Entrada : Una cadena de longitud 5 del alfabeto Lojban.
Salida : un valor verdadero si la cadena puede ser un gismu y un valor falsey de lo contrario.
Casos de prueba
Válido:
gismu
cfipu
ranxi
mupno
rimge
zosxa
Inválido:
ejram
xitot
dtpno
rcare
pxuja
cetvu
Más casos de prueba: este archivo de texto contiene todos los gismu válidos, uno por línea.
Realmente no conozco a Lojban, así que sospecho que la traducción del título es incorrecta. La ayuda es apreciada.
fuente
s
yk
son parte del lenguaje, ¿qué pronunciaciónc
tiene?j
no se pronuncia como inglés J, sino más bien como francés J (sin el plosivo al principio). De una de las páginas enlazadas,The regular English pronunciation of “James”, which is [dʒɛjmz], would Lojbanize as “djeimz.”, which contains a forbidden consonant pair......[additional rule to avoid this]
entonces vemos que el plosivo D necesita ser agregado. La versión del francés J es de hecho SH. Los símbolos de IPA (para aquellos que los entienden) están en la página de wikipedia.Respuestas:
Rubí,
302252 bytesSe podrían guardar algunos bytes más de la siguiente manera:
Inicializar
z
a falso usandoz=!c='[cjsztdpbfvkgxmnlr]'
. Esto funciona pero da la advertenciawarning: found = in conditional, should be ==
.Cambiar de un programa a una función (lo dejé como un programa porque, según la pregunta, gana el "programa" más corto en bytes).
Resumen de cambios de la primera publicación
Revisión importante de la expresión regular / parte correspondiente.
La constante 72 cambió a 69 para que el código ASCII más bajo en la cadena mágica sea 10 en lugar de 13. Esto permite que se use una nueva línea literal en la versión de golf en lugar de una secuencia de escape.
La cadena mágica
'mzxcxkx'
reemplaza las reglas aritméticas de los 5 caracteres prohibidos en la tabla de tipos CVCCV.versión sin golf
espacio en blanco agregado y cambio de nueva línea en una cuerda mágica a
\n
Explicación de la correspondencia
Los dos caracteres en la cadena de entrada
s[n,2]
se comparan con el par de caracteres del bucle iterativo. Si coinciden y el patrón de expresión regular vocal-consonante es correcto,i,j
se verifica la validez de los valores de fila y columna . El ordenamiento cuidadoso de las consonantes ayuda aquí.Para CVCCV:
Para CCVCV
Un mapa de bits para cada columna de la tabla a continuación se codifica en la cadena mágica, de la cual se resta 69. Para todas las columnas, excepto las dos últimas, solo se requieren 6 bits. Para los dos últimos, los bits de orden superior deben ser 1, por lo que se genera un número negativo (caracteres
\n
y:
) para tener 1 en lugar de ceros a la izquierda. Sin embargo, no queremos incluir las últimas tres filas de la tabla, por lo que en lugar de cambio de derechos y AND por 1, cambiamos de derecho y AND por lo1-j/14
que normalmente se evalúa a 1, pero se evalúa a 0 para las últimas 3 filas.El siguiente programa (con las mismas expresiones que el envío) se utilizó para generar las tablas a continuación (descomente la
if
línea que se requiera para la tabla que desee.fuente
JavaScript (ES6),
366352 bytesExplicación
Devuelve una matriz que contiene la última letra (verdad) si es un gismu válido o
null
si no lo es.Gran parte del tamaño proviene de los
CCVCV
pares codificados (incluso después de condensarlos). ¡Es posible encontrar un patrón para generarlos, pero ya he pasado demasiado tiempo en esto! xDPrueba
Mostrar fragmento de código
fuente
Javascript ES6, 240 bytes
Supongo que este es mi trabajo ahora.
fuente