Vous devez écrire un programme ou une fonction qui détermine la langue d'un mot donné.
La tâche consiste à reconnaître certains des 5000 mots les plus courants en 4 langues:
- Anglais
- allemand
- italien
- hongrois
Les listes de mots peuvent être trouvées dans ce référentiel GitHub.
Vous êtes autorisé à faire des erreurs dans 40% des cas de test fournis . C'est-à-dire que vous pouvez mal catégoriser 8000 des 20000 entrées.
Détails
- Les listes ne contiennent que des mots avec des lettres minuscules
a-z
, par exemplewon't
etmöchte
ne sont pas incluses. - Quelques mots apparaissent dans plusieurs langues, ce qui signifie que votre code ne peut pas toujours deviner correctement la sortie attendue.
- Pour plus de commodité, vous pouvez télécharger tous les cas de test en une seule liste . Dans chaque ligne, un nombre indique la langue du mot. (
1
pour l'anglais, l'2
allemand, l'3
italien et le4
hongrois.) - Failles standard ne sont pas autorisées.
- L'utilisation de listes de mots nos données similaires fournies par votre langage de programmation est interdite.
Contribution
- Chaîne contenant uniquement des lettres anglaises minuscules (az).
- Le retour à la ligne est facultatif.
Production
- Vous pouvez classer les mots en fournissant une sortie distincte et cohérente (toujours la même) pour chaque langue. (Par exemple
1
pour l'anglais, l'2
allemand, l'3
italien et le4
hongrois.)
C'est le golf de code, donc le programme ou la fonction la plus courte l'emporte.
Code de golf associé: est-ce même un mot?
Les listes de mots proviennent de wiktionary.org et 101languages.net.
code-golf
natural-language
word
classification
randomra
la source
la source
all_languages
fichier comprend des dizaines de mots en majuscules (Mr
,Gutenberg
, etc.) et les non-mots "" (chaîne vide) et "]] | -". Je suppose que c'est OK de mettre en minuscule le premier et de supprimer le dernier?Réponses:
Rétine , 51 octets
Je suis venu avec les regexes et @ MartinBüttner a fait la conversion à / golf à Retina alors ... hourra pour l'effort d'équipe?
La cartographie est
1 -> Italian, 2 -> German, (empty) -> Hungarian, 4 -> English
, avec le montant classé dans chaque catégorie étant4506 + 1852 + 2092 + 3560 = 12010
.Essayez-le en ligne! | Version multiligne modifiée
Explication
Tout d'abord, l'équivalent Python ressemble à ceci:
Permettez-moi de dire que
o$
c'est un excellent indicateur de l'italien.La version Retina est similaire, avec des paires de lignes formant des étapes de remplacement. Par exemple, les deux premières lignes
remplace les correspondances de la première ligne par le contenu de la seconde.
Les trois lignes suivantes font de même, mais en utilisant le mode anti-grep de Retina - anti-grep (spécifié avec
A`
) supprime la ligne si elle correspond à l'expression régulière donnée, et les deux lignes suivantes sont un remplacement d'une ligne vide vers la sortie souhaitée.La ligne suivante utilise à nouveau l'anti-grep, mais ne remplace pas la ligne vide, donnant la sortie fixe pour le hongrois.
Enfin, les deux dernières lignes
remplace une ligne non vide non numérique par
4
. Toutes les substitutions ne peuvent se produire que si aucune substitution précédente n'est activée, simulant uneif/else if
chaîne.la source
LabVIEW, 29 primitives LabVIEW et 148,950 octets
fait défiler les langues et place l'itérateur dans un tableau si le mot est là. Ceci est vérifié par la boucle intérieure, en choisissant la ième ligne et en faisant
=
. Dans LabVIEW, cela ne donne un vrai que si les chaînes sont exactement les mêmes.Maintenant, prenez le premier élément du tableau de sortie pour que english passe le reste.
La sortie pour l'instant est
0
pour l'anglais, l'1
allemand, l'2
italien et le3
hongrois.la source
Java, 3416 octets, 62%
c'est ma solution, j'analyse la liste des mots donnés et trouve 60 la plupart des bigrammes et trigrammes communs pour chaque langue. Maintenant, je vérifie mes n-grammes par rapport à word, et je choisis la langue avec la plupart des n-grammes en word.
et c'est ma vitrine
la source