Вы должны написать программу или функцию, которая определяет язык данного слова.
Задача состоит в том, чтобы распознать некоторые из 5000 наиболее распространенных слов на 4 языках:
- английский
- Немецкий
- итальянский
- Венгерский
Списки слов можно найти в этом репозитории GitHub.
Вам разрешено делать ошибки в 40% предоставленных тестовых случаев . Т.е. вы можете неправильно классифицировать 8000 из 20000 входов.
Детали
- Списки содержат только слова с строчными буквами,
a-z
например,won't
иmöchte
не включены. - Несколько слов появляются на нескольких языках, что означает, что ваш код не всегда может правильно угадать ожидаемый результат.
- Для удобства вы можете скачать все контрольные примеры одним списком . В каждой строке число указывает на язык слова. (
1
для английского,2
для немецкого,3
для итальянского и4
для венгерского.) - Стандартные лазейки запрещены.
- Использование списков слов аналогичных данных, предоставленных вашим языком программирования, запрещено.
вход
- Строка, содержащая только строчные английские буквы (az).
- Трейлинг новой строки не является обязательным.
Выход
- Вы можете классифицировать слова, предоставляя различный и непротиворечивый (всегда одинаковый) вывод для каждого языка. (Например,
1
для английского,2
для немецкого,3
для итальянского и4
для венгерского.)
Это код гольф, поэтому выигрывает самая короткая программа или функция.
Связанный код гольф вопрос: это даже слово?
Списки слов были взяты с wiktionary.org и 101languages.net.
code-golf
natural-language
word
classification
randomra
источник
источник
all_languages
Файл включает в себя десятки капитализированных слов (Mr
,Gutenberg
и т.д.) и не-слова «» (пустая строка) и «]] | -». Я предполагаю, что это нормально, чтобы нижний регистр первого и удалить второе?Ответы:
Сетчатка , 51 байт
Я придумал регулярные выражения, и @ MartinBüttner сделал преобразование в / гольф в Retina, так что ... ура для командной работы?
Отображение
1 -> Italian, 2 -> German, (empty) -> Hungarian, 4 -> English
, с количеством, классифицированным в каждой категории, является4506 + 1852 + 2092 + 3560 = 12010
.Попробуйте онлайн! | Модифицированная многострочная версия
объяснение
Во-первых, эквивалентный Python выглядит примерно так:
Позвольте мне просто сказать, что
o$
это отличный показатель итальянского языка.Версия Retina схожа с парами линий, образующими стадии замены. Например, первые две строки
заменяет совпадения первой строки содержимым второй.
Следующие три строки делают то же самое, но используя режим Retina Anti-Grep - anti-grep (задается с
A`
) удаляет строку, если она соответствует заданному регулярному выражению, и следующие две строки заменяют пустую строку на желаемый вывод.Следующая строка снова использует anti-grep, но не заменяет пустую строку, давая фиксированный вывод для венгерского.
Наконец, последние две строки
заменяет непустую нецифровую строку на
4
. Все замены могут произойти только в том случае, если не было активировано предыдущее замещение, имитирующееif/else if
цепочку.источник
LabVIEW, 29 примитивов LabVIEW и 148,950 байт
циклически переключает языки и помещает итератор в массив, если слово есть. Это проверяется внутренним циклом, выбирает i-ю строку и выполняет
=
. В LabVIEW он дает истину только в том случае, если строки совпадают.Теперь возьмите первый элемент выходного массива, чтобы английский перебрал остальные.
На данный момент вывод для
0
английского,1
немецкого,2
итальянского и3
венгерского языков .источник
Ява, 3416 байт, 62%
это мое решение, я анализирую список заданных слов и нахожу 60 наиболее распространенных биграмм и триграмм для каждого языка. Теперь я проверяю свои n-граммы против слова и выбираю язык с большинством n-граммов в слове.
и это мой тест
источник