Créez une fonction qui prend une chaîne de syllabes pinyin comme argument et renvoie vrai de la combinaison existe, faux sinon.
Utilisez "v" pour "ü".
Voici une liste complète des combinaisons. http://www.pinyin.info/rules/initials_finals.html
Exemples
f("bu") == true
f("zheng") == true
f("nv") == true
f("ri") == true
f("cei") == false
f("ia") == false
f("kian") == false
f("qa") == false
S'il vous plaît, ne faites pas de choses comme gratter des pages Web ou lire des fichiers de méthode d'entrée pour réduire le nombre de caractères. (Si vous le faites, la longueur des données sera prise en compte dans le nombre de caractères) L'un des objectifs de ce code golf est de voir comment les règles peuvent être simplifiées. Le code le plus court gagne.
code-golf
kolmogorov-complexity
Ming-Tang
la source
la source
nar
? : Pnvi
soit une combinaison valable.Réponses:
JavaScript 1.6,
503496477 caractèresFomatté un peu plus de manière lisible (sauf erreur dans la décomposition du code en quelques lignes):
Les cas à zéro initial plus quelques cas uniques sont testés avec une expression régulière. Après cela, la table est codée comme une série (concaténée) de 6 chiffres, base 36, un par son initial. La recherche utilise ensuite une paire d'
indexOf
appels et un décalage pour sélectionner le bon bit.Testé contre toutes les cellules du tableau des combinaisons (cellules pleines testées pour vrai, cellules vides testées pour faux).
Edit: Remplacement de certains des 36 caractères de la recherche en base 36 par des comparaisons puisque g–, k–, h–, j–, q– et z– ont des blocs denses de vrai / faux.
Edit: réarrangé le test de bits pour éviter un inutile
!!
et compacté davantage l'expression régulière .la source
!!
? Je ne suis pas sûr de comprendre pourquoi vous auriez besoin d'un double pas ...if (g(s) == (validList.indexOf(s) >= 0)
ce qui retourne false on16 == true
; Je l'ai débattu du point de vue «qu'est-ce que« vrai »signifie vraiment» »et laissé la chose en place. Dans les deux cas, j'ai un changement prévu pour plus tard aujourd'hui qui supprimera le!!
en remplaçant1<<r&*parseInt
par (plus ou moins)(parseInt>>r)&1
afin que le le retour est 1 et je rase deux caractères.PHP, 548 caractères
Certes, ce n'est probablement pas optimal, mais j'ai écrit une expression régulière pour faire correspondre les combinaisons de pinyin valides. Réduction des caractères en remplaçant les sous-chaînes répétitives par des variables.
Code
Usage
la source
F #, 681 caractères
N'obtient pas tout à fait les syllabes sans consonne initiale correcte (Y, W, etc.).
la source
APL (Dyalog Extended) , 475 octets
Essayez-le en ligne!
Golf en cours.
Non golfé
Essayez-le en ligne!
La fonction d'assistance
s
décompresse une chaîne délimitée par des espaces:Je stocke d'abord les chaînes initiales et finales possibles dans la syllabe, puis je crée un tableau
tab
contenant la concaténation de chaque chaîne de la première liste avec chaque chaîne de la deuxième liste.Ensuite, je stocke des données binaires sous forme de liste d'entiers. Certains des entiers sont répétés et peuvent donc être stockés dans des variables, ce qui permet également d'éliser certains espaces.
Chaque entier est décodé en binaire et représente une ligne du tableau. Chaque bit du nombre représente si une certaine syllabe de cette ligne est une syllabe valide, le MSB représentant la première colonne. Toutes les syllabes invalides sont supprimées du tableau.
Nous aplatissons le tableau dans une liste, ajoutons les formulaires sans consonne initiale comme cas spécial et vérifions enfin si notre entrée est dans la liste.
Autre potentiel de golf possible:
Générateur de scripts et de cas de test utile Python: essayez-le en ligne!
la source