(Literalmente: "Será que este acompanhamento / perceber a gismu -forma?")
Premissa
A linguagem Lojban é uma linguagem construída , o que significa em parte que todas as suas palavras foram criadas e não permitidas a se desenvolver naturalmente. A base semântica do Lojban são seus gismu , ou palavras-raiz, que foram sintetizadas pela combinação de raízes de idiomas naturais amplamente falados, como chinês, hindi e inglês. Todos os gismu têm 5 letras e seguem uma certa forma estrita.
Em formação
Para nossos propósitos, o alfabeto Lojban é:
abcdefgijklmnoprstuvxz
Ou seja, o alfabeto romano sem hqwy
.
Este alfabeto pode ser dividido em quatro categorias:
Vogais
aeiou
Consoantes sonoras
lmnr
Consoantes não sonoras
ptkfcsx
. Quando dublados, tornam-se respectivamente os ...Consoantes
bdgvjz
sonoras (nenhuma consoante sonora corresponde ax
.)
Para ser um gismu válido, uma string de 5 caracteres deve:
Esteja em um dos padrões consoante-vogal
CVCCV
ouCCVCV
, em que C representa uma consoante e V representa uma vogal.Siga as regras de correspondência de consoantes.
Regras de correspondência consoante para palavras CCVCV:
Os dois primeiros caracteres devem constituir um dos 48 pares a seguir ( origem ):
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
Observe que isso parece melhor quando separado em pares sonoros e sonoros. Em particular, cada par sonoro é válido se o par sonoro correspondente não sonoro for válido. Isso não se estende a pares com uma consoante sonora; cl
é válido, mas jl
não é.
Regras de correspondência de consoantes para palavras CVCCV ( fonte ):
O terceiro e o quarto caracteres devem seguir as seguintes regras:
É proibido que ambas as consoantes sejam as mesmas [...]
É proibido que uma consoante seja dublada e a outra não dublada. As consoantes "l", "m", "n" e "r" estão isentas desta restrição. Como resultado, "bf" é proibido, e "sd", mas "fl" e "vl" e "ls" e "lz" são permitidos.
É proibido que ambas as consoantes sejam extraídas do conjunto “c”, “j”, “s”, “z”.
Os pares específicos "cx", "kx", "xc", "xk" e "mz" são proibidos.
Observe que existem 179 pares possíveis.
Desafio
Determine se a sequência fornecida segue as regras de formação do gismu . Isso é código-golfe , então a solução mais curta em bytes vence.
Entrada : uma sequência de comprimento 5 do alfabeto Lojban.
Saída : um valor verdadeiro se a string puder ser um gismu e um valor Falsey contrário.
Casos de teste
Válido:
gismu
cfipu
ranxi
mupno
rimge
zosxa
Inválido:
ejram
xitot
dtpno
rcare
pxuja
cetvu
Mais casos de teste: esse arquivo de texto contém todo o gismu válido, um por linha.
Eu realmente não conheço Lojban, então suspeito que a tradução do título esteja errada. A ajuda é apreciada.
fonte
s
ek
são parte da linguagem, o que faz pronúnciac
tem?j
não é pronunciado como inglês J, mas sim como francês J (sem a plosiva no início.) De uma das páginas vinculadasThe regular English pronunciation of “James”, which is [dʒɛjmz], would Lojbanize as “djeimz.”, which contains a forbidden consonant pair......[additional rule to avoid this]
, vemos que o D plosivo precisa ser adicionado. versão do francês J é realmente SH. Os símbolos IPA (para quem os entende) estão na página da Wikipedia.Respostas:
Ruby,
302252bytesMais alguns bytes podem ser salvos da seguinte maneira:
Inicialize
z
para false usandoz=!c='[cjsztdpbfvkgxmnlr]'
. Isso funciona, mas dá o avisowarning: found = in conditional, should be ==
.Mude de um programa para uma função (deixei como programa porque, de acordo com a pergunta, o menor "programa" em bytes vence.)
Resumo das alterações da primeira postagem
Revisão principal da regex / parte correspondente.
A constante 72 foi alterada para 69, de modo que o código ASCII mais baixo da seqüência mágica seja 10 em vez de 13. Isso permite que uma nova linha literal seja usada na versão em golfe em vez de uma sequência de escape.
Corda mágica
'mzxcxkx'
substitui as regras aritméticas dos 5 caracteres proibidos na tabela de tipos CVCCV.versão ungolfed
espaço em branco adicionado e mudança de nova linha na string mágica para um
\n
Explicação da correspondência
Os dois caracteres na sequência de entrada
s[n,2]
são comparados com o par de caracteres do loop de iteração. Se eles corresponderem e o padrão de regex consoante-vogal estiver correto, os valores de linha e colunai,j
serão verificados quanto à validade. A ordenação cuidadosa das consoantes ajuda aqui.Para CVCCV:
Para CCVCV
Um bitmap para cada coluna da tabela abaixo é codificado na sequência mágica, da qual 69 é subtraído. Para todas as colunas, exceto as duas últimas, são necessários apenas 6 bits. Nos dois últimos, os bits de ordem superior precisam ser 1, de modo que um número negativo é gerado (caracteres
\n
e:
) para ter 1s iniciais em vez de zeros iniciais. No entanto, não queremos incluir as três últimas linhas da tabela; portanto, em vez de shift de direitos e AND por 1, shift de direitos e AND pelo1-j/14
qual normalmente é avaliado como 1, mas é avaliado como 0 nas últimas 3 linhas.O programa a seguir (com as mesmas expressões do envio) foi usado para gerar as tabelas abaixo (descomente a
if
linha que for necessária para a tabela que você deseja).fonte
JavaScript (ES6),
366352 bytesExplicação
Retorna uma matriz contendo a última letra (verdade) se for um gismu válido ou
null
se não for.Muito do tamanho vem dos
CCVCV
pares codificados (mesmo após condensá-los). Pode ser possível encontrar um padrão para gerá-los, mas já gastei muito tempo com isso! xDTeste
Mostrar snippet de código
fonte
Javascript ES6, 240 bytes
Acho que esse é o meu trabalho agora.
fonte