Crie uma função que use uma sequência de sílabas pinyin como argumento e retorne true da combinação existente, caso contrário, false.
Use "v" para "ü".
Aqui está uma lista completa de combinações. http://www.pinyin.info/rules/initials_finals.html
Exemplos
f("bu") == true
f("zheng") == true
f("nv") == true
f("ri") == true
f("cei") == false
f("ia") == false
f("kian") == false
f("qa") == false
Por favor, não faça coisas como raspar páginas da Web ou ler arquivos de métodos de entrada para reduzir a contagem de caracteres. (Se o fizer, o comprimento dos dados será contado na contagem de caracteres) Um dos objetivos desse código de golfe é ver como as regras podem ser simplificadas. O menor código vence.
code-golf
kolmogorov-complexity
Ming-Tang
fonte
fonte
nar
? : Pnvi
seja uma combinação válida.Respostas:
JavaScript 1.6,
503496477 caracteresFomatizado um pouco mais facilmente (exceto erros ao quebrar o código em algumas linhas):
Os casos com zero inicial e alguns pontuais são testados com uma expressão regular. Depois disso, a tabela é codificada como uma série (concatenada) de números de base 36 de 6 dígitos, um por som inicial. A pesquisa usa um par de
indexOf
chamadas e um turno para selecionar o bit certo.Testado em todas as células da tabela de combinações (células preenchidas testadas como verdadeiras, células vazias testadas como falsas).
Edit: Substituiu alguns dos 36 caracteres da pesquisa base-36 por comparações desde g -, k -, h -, j -, q - e z - têm blocos densos de verdadeiro / falso.
Edit: Reorganizou o teste de bits para evitar um desnecessário
!!
e compactou mais o regex.fonte
!!
? Eu não estou certo que eu entendo por que você iria precisar de um duplo não ...if (g(s) == (validList.indexOf(s) >= 0)
qual retorna false16 == true
; Eu debati-lo de um "o que faz 'true' realmente significa" perspectiva e deixou a coisa. Em ambos os casos, eu tenho uma mudança planejada para mais tarde hoje que vai acabar com o!!
substituindo1<<r&*parseInt
com (mais ou menos)(parseInt>>r)&1
para que o o retorno é 1 e eu raspo dois caracteres.PHP, 548 caracteres
Concedido, provavelmente não é o ideal, mas escrevi um regex para combinar combinações válidas de pinyin. Caracteres reduzidos substituindo substrings repetidos por variáveis.
Código
Uso
fonte
F #, 681 caracteres
Não consegue as sílabas sem a consoante inicial correta (Y, W, etc.).
fonte
APL (Dyalog Extended) , 475 bytes
Experimente online!
Golfe em andamento.
Ungolfed
Experimente online!
A função auxiliar
s
descompacta uma sequência delimitada por espaço:Primeiro guardo as possíveis sequências iniciais e finais na sílaba e, em seguida, faço uma tabela
tab
contendo a concatenação de cada sequência da primeira lista com cada sequência da segunda lista.Em seguida, armazeno dados binários como uma lista de números inteiros. Alguns dos números inteiros são repetidos e, portanto, podem ser armazenados em variáveis, o que também permite a elisão de alguns espaços.
Cada número inteiro é decodificado em binário e representa uma linha da tabela. Cada bit no número representa se uma determinada sílaba nessa linha é uma sílaba válida, com o MSB representando a primeira coluna. Todas as sílabas inválidas são removidas da tabela.
Achatamos a tabela em uma lista, adicionamos os formulários sem consoante inicial como um caso especial e, finalmente, verificamos se nossa entrada está na lista.
Possível potencial de golfe adicional:
Script útil em Python e gerador de casos de teste: Experimente online!
fonte