Задав строку в качестве входных данных, определите, является ли она существительным или нет.
Вы будете оцениваться по 1000 наиболее распространенных английских слов, по тому, сколько вы правильно назвали как существительное или нет.
Программа или функция, которая правильно классифицирует большинство этих слов в 50 байтах или меньше, победит.
Существительные
Существительное - это слово, которое представляет вещь, как правило. Это становится более сложным, но это основная идея.
В тех случаях, когда слово может быть существительным или какой-либо другой частью речи, я классифицировал его как существительное, даже если это редкое использование. Или на самом деле, я позволил этому сайту сделать это для меня.
Слова, по которым вы получите оценку, - это 1000 общих слов из простой Википедии с добавлением «два» и «один раз». Из них это 586 существительных и 414 не существительных . Вы можете найти все три списка здесь . Обратите внимание, что все эти входы в нижнем регистре. Эти списки являются окончательными - не пытайтесь спорить по грамматике.
Ваша программа будет считаться правильной, если она выведет истинный результат на входе, который является существительным, и ложный результат на входе, который не является существительным.
Тонкости:
Программы должны иметь детерминированный результат. Если вы хотите использовать случайность, начните сеять. Программы не могут использовать встроенные списки существительных или другие встроенные функции части речи.
Примеры:
a: noun
act: noun
active: noun
about: non-noun
above: non-noun
across: non-noun
Пожалуйста, укажите, каков показатель успешности вашей программы в вашем ответе. Программа или функция длиной не более 50 байтов с наибольшим успехом выигрывает. В случае ничьей, младший счетчик байтов определит победителя. Удачи!
[bcdf-mp-tvwy]
эквивалентен классу[^aenouxz]
. Изменение сэкономило бы 4 байта, которые можно было бы использовать.[^aenouz]
потому что у нас нет слова, начинающегося с ax
.Желе , 48 байт, оценка 731
Это мой первый ответ в Jelly, и я приложил немало усилий, чтобы собрать это воедино. Ах, хорошо ... это было весело. :-)
1 байт сохранен благодаря @JonathanAllan
Попробуйте онлайн!
Разбивка и тестирование
Как?
Сначала мы вычисляем хеш входной строки:
Это оставляет нам индекс в [0 ... 255] и, таким образом, делит все слова на 256 групп.
Для каждой группы слов мы предварительно вычисляем двоичный флаг, который заключается в
1
том, что в группе содержится больше существительных, чем не существительных, и в0
противном случае. Это приводит к 256-битному числу N, которое мы собираемся использовать в качестве справочной таблицы. Мы храним его как строку в кодировке base-250.Ниже двоичное представление N .
Который можно хранить как
“Ạ$ⱮẊḲḲLÑMṆụ⁻ẉṂ`ŻvḤæɠ5ṭȯƁU*×TdƲḥ`’
в желе.Отсюда и код:
источник
O‘ḅ⁹%⁽€Oæ»4“Ạ$ⱮẊḲḲLÑMṆụ⁻ẉṂ`ŻvḤæɠ5ṭȯƁU*×TdƲḥ`’æ»Ḃ
(также обратите внимание, что вы можете использовать нижний колонтитул на TIO, я бы пошелÇ€¬S,L
иÇ€S,L
для двух ваших тестовых пакетов.JavaScript (ES6), 50 байт, оценка 693
Просто ищите возможные шаблоны, которые есть у не-существительных, а не у существительных.
Не существительные чаще содержат:
Отрывок:
Показать фрагмент кода
источник
/h|n/
(или выполнив/^.[hn]/.test(s)
), а другой -s[2]>''
на либо либо,!!s[2]
либо2 in s
.a.p
лишним, так как у вас уже есть[aouz]
?[aouz]
сопоставляется только в начале строки. По какой-то причине тестирование вa.p
любом месте строки улучшает результат.Желе , 50 байт , оценка 763
Использование хэша сейчас (очень похоже на ответ Арнольда на желе )
Попробуйте онлайн!
250/414 для не-существительных
513/586 для существительных
Всего = 250 + 513 = 763.
Как?
Создает таблицу с 308 записями: 1 (идентифицирует существительное) или 0 (идентифицирует не существительное) и индексирует в нее ключ, предоставленный хеш-функцией, которая использует произведение порядковых чисел входного слова:
Предыдущая:
5047 байтов , оценка 684Монадическая ссылка, берущая слово и возвращающая список из одного символа (истинный), если слово идентифицируется как существительное, или пустой список или ноль (оба ложные), если это не так.
Попробуйте онлайн! (нижний колонтитул выполняет if if для результата, чтобы напечатать
Noun
илиNon-Noun
)... или посмотреть программу оценки (подсчитывает истинные индексы по двум спискам, а затем вычисляет оценку).
Распределение баллов: 462/586 существительных, правильно определенных (124 неверных), 222/414 не-существительных, правильно определенных (192 неверных) - итого правильно = 684/1000.
Как?
Думаю, это не существительное, если ...
'be', 'th', 'le', 'he', 'm ', 'ev', 'et', 's ', 'fl', 'ax', 'en', 'fo', 'am', 'az'
(примечание:'m '
и's '
предназначена только для упрощения сжатия, но в любом случае они никогда не появляются)aenouyz
(хотя это реализовано обратно и с использованием избыточных заглавных букв)... поскольку все слова имеют длину от 1 до 11, -299- й индекс эквивалентен чтобы использовать длину для индексации отображения:
{7:2; 8:5; 9:7; 11:9; else 1}
13 байт, оценка: 638
Первый быстрый удар (расширенный выше)
источник
0,-2
не значит, чтоpair zero with -2
это значитliteral [0, -2]
0,-2
нилад, не отдельный(0)(,)(-2)
... конечно, это тот же эффект в этом случае, но не всегда. Я узнал, что это нелегкий путь ... и в любом случае я бы предпочел объяснить, что на самом деле происходит, а не что-то с тем же эффектом или чем-то.j
»?pair
илиjoin
, очевидно, неправильно формулирую это, поскольку,0,-2,-6
например, это не значит,pair 0 with -2 and then pair that with -6 = [[0, -2], -6]
а скорее означаетliteral [0, -2, -6]
. Я понял , что,
атом и...,...(,...(...))
литерал сбивают с толку ... но все же0,-2,-6
это не совсем то же самое, что и то,0,-2;-6
что первое - 1 ссылка, а второе - 3 ссылки.Юлия 34 байта, 609
f(w)=hash(w)&0x0800000000004808>0
Я хотел сэкономить на символах, используя встроенный хэш. Я чувствую, что должен быть способ сделать это лучше. Джулия просто недостаточно дружелюбна к операциям с битами, которые я хочу использовать, чтобы сделать это лучше, я думаю.
Поиск подходящих битовых масок для хеша для их разделения - интересная игра.
источник
Python 2 , 50 байт, точность: 596
Попробуйте онлайн!
Просто проверяет первую букву, длину и указывает, что слово «st» в слове «Код» предполагает, что слово определено как x (Правка: благодаря issacg за исправление кода из фрагмента в функцию)
источник
Haskell, 36 байтов,
626631источник
length x>2&&(x!!0`notElem`"aenou"||x!!1`elem`"acqrsty")
2-х уровневая реализация логического вентиля, не 50 байтов, оценка 1000
Просто подключите двоичное представление данного слова к 88 входам
Схема возвращает 1, если слово является существительным, и возвращает 0, если нет
Эта реализация нуждается
Некоторые измерения
Полное разрешение Circuit.pdf здесь
Полное разрешение Circuit.png здесь
источник
Python 3, 50 байт, оценка 602
Python не самый многословный язык, но 50 байтов жесткие.
источник