Cree una función que tome una cadena de una sílaba pinyin como argumento, y devuelva verdadero de la combinación existente, falso de lo contrario.
Use "v" para "ü".
Aquí hay una lista completa de combinaciones. http://www.pinyin.info/rules/initials_finals.html
Ejemplos
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, no haga cosas como raspar páginas web o leer archivos de métodos de entrada para reducir el recuento de caracteres. (Si lo hace, la longitud de los datos se contará para el recuento de caracteres). Uno de los propósitos de este código de golf es ver cómo se pueden simplificar las reglas. El código más corto gana.
code-golf
kolmogorov-complexity
Ming-Tang
fuente
fuente
nar
? : Pnvi
sea una combinación válida.Respuestas:
JavaScript 1.6,
503496477 caracteresFomatizado un poco más legible (salvo cualquier error al dividir el código en unas pocas líneas):
Los casos iniciales cero más algunos únicos se prueban con una expresión regular. Después de eso, la tabla se codifica como una serie (concatenada) de 6 dígitos, números base 36, uno por sonido inicial. La búsqueda luego utiliza un par de
indexOf
llamadas y un cambio para seleccionar el bit correcto.Probado contra todas las celdas en la tabla de combinaciones (celdas llenas probadas para verdaderas, celdas vacías probadas para falsas).
Editar: Reemplazó algunos de los 36 caracteres de la búsqueda de base 36 con comparaciones ya que g–, k–, h–, j–, q– y z– tienen bloques densos de verdadero / falso.
Editar: reorganizó la prueba de bits para evitar una innecesaria
!!
y compactó más la expresión regular.fuente
!!
? No estoy seguro de entender por qué necesitarías un doble no ...if (g(s) == (validList.indexOf(s) >= 0)
cual devuelve falso en16 == true
; Lo debatí desde una perspectiva de "lo que realmente significa 'verdadero'" y dejé la cosa adentro. En cualquier caso, tengo un cambio planeado para hoy más tarde que eliminará el!!
reemplazo1<<r&*parseInt
con (más o menos)(parseInt>>r)&1
para que el return es 1 y me afeito dos caracteres.PHP, 548 caracteres
De acuerdo, es probable que no sea óptimo, pero escribí una expresión regular para que coincida con combinaciones válidas de pinyin. Caracteres reducidos mediante la sustitución de subcadenas repetidas con variables.
Código
Uso
fuente
F #, 681 caracteres
No obtiene las sílabas sin la consonante inicial correcta (Y, W, etc.).
fuente
APL (Dyalog Extended) , 475 bytes
Pruébalo en línea!
Golf en progreso.
Sin golf
Pruébalo en línea!
La función auxiliar
s
desempaqueta una cadena delimitada por espacios:Primero almaceno las posibles cadenas iniciales y finales en la sílaba, luego hago una tabla que
tab
contiene la concatenación de cada cadena de la primera lista con cada cadena de la segunda lista.A continuación, almaceno datos binarios como una lista de enteros. Algunos de los enteros se repiten y, por lo tanto, se pueden almacenar en variables, lo que también permite la elisión de algunos espacios.
Cada número entero se decodifica en binario y representa una fila de la tabla. Cada bit en el número representa si cierta sílaba en esa fila es una sílaba válida, con el MSB representando la primera columna. Todas las sílabas no válidas se eliminan de la tabla.
Aplanamos la tabla en una lista, agregamos las formas sin consonante inicial como un caso especial y finalmente verificamos si nuestra entrada está en la lista.
Posible potencial de golf adicional:
Script útil de Python y generador de casos de prueba: ¡ Pruébelo en línea!
fuente