Вы должны написать программу или функцию, которая принимает 4-символьную строку в качестве входных данных и выводит значение, указывающее, является ли строка английским словом или нет. Вам разрешено делать ошибки в 15% предоставленных тестовых случаев.
Детали ввода:
Ввод - это 4-символьная строка, содержащая только строчные латинские буквы (az).
Выходные данные:
Если ввод является английским словом, вы должны вывести логическое true
или целое число 1
.
Если ввод не является английским словом, вы должны вывести логическое false
или целое число 0
.
Списки слов
список 4-х буквенных английских слов (2236 слов)
список 4-х буквенных словесных строк (2236 строк)
Список, состоящий не из слов, содержит последовательно сгенерированные случайным образом последовательности букв с удаленными из них реальными словами.
тестирование
Ваша программа или функция должны делать не более 15% ошибок в заданных списках слов вместе. Это означает, что вы можете дать неправильный вывод для 670 из 4472 предоставленных входов.
Вы также должны опубликовать программу тестирования или функцию, чтобы другие могли проверить ваш ответ. Длина вашей тестовой программы не учитывается при подсчете результатов.
Стандартные лазейки запрещены.
Ваша программа не должна использовать какие-либо внешние источники, например, доступ к сети или чтение из файла.
Это код-гольф, поэтому выигрывает самая короткая программа или функция.
источник
Ответы:
Рубин, 29 байт
Надеюсь, я правильно понял - это мой первый раз программирование на Ruby. Я фактически делал все свои тесты на Python, но это
import re
было слишком долго для меня.Это анонимная функция, которая принимает строку и выводит
true/false
соответственно. Он использует регулярное выражение, которое ищет одну из следующих двух вещей:jqxz
Если какой-либо из них присутствует, мы классифицируем ввод как не слово.
Функция сопоставляет 2030 слов (неправильно с ошибкой на 206) и сбоем на 1782 несловах (неправильно совпадает с 454), в общей сложности 660 ошибочных классификаций. Проверено на идеоне .
Спасибо @ MartinBüttner за помощь по Ruby. Мартин также указывает, что полная программа занимает столько же байтов:
Также спасибо user20150203 за упрощение регулярных выражений.
Рубин,
15861488134912881203 байтаДля бонуса, вот функция с гораздо более длинным регулярным выражением:
Я хотел показать, что регулярное выражение все еще может превзойти сжатие, поэтому этот класс правильно классифицирует каждый данный случай . Само регулярное выражение немного похоже на экспоненциальный спад - первые биты соответствуют большому количеству не-слов, затем каждый бит после совпадений становится все меньше и меньше, пока я не сдался и не конкатенировал остальные (около 200 или около того) в конце. Некоторые из тех , которые были слева выглядели удивительно , как настоящие слова (например,
chia
которая является слово).Я бросил регулярное выражение в мой очиститель гольфа для регулярных выражений, который я написал для другой задачи - он занял около 300 байт, прежде чем мне пришлось пытаться перемешивать вещи вручную. Хотя все еще есть немало возможностей для игры в гольф.
источник
->s{!s[/[^aeiou]{3}|[jqxz]/]}
имеет только 29 байтов и соответствует 2030 словам (неправильно с ошибкой на 206) и не на 1782 не -слов (неправильно соответствует 454), в общей сложности 660 ошибочных классификаций. "v
. Спасибо user20150203!Groovy,
7774Я написал тестовую программу на Java, которую вы можете найти в этом Gist на Github. Вот вывод из моей тестовой программы:
(Не удалось 629 тестов)
PS Я думаю, это очень скоро закончится проблемой с регулярным гольфом ...
Если ответ Sp3000 (функция) будет преобразован в Groovy, он будет иметь то же количество символов. Как названная функция:
или безымянная функция:
источник
Javascript, 1626 байт:
Я хотел найти решение, в котором для каждого персонажа есть подсказка, какой из них может последовать. Не так коротко, но нет регулярных выражений и довольно хороший результат (слова: 101 ошибка, не слова, 228 ошибок)
Вот рабочая реализация http://fiddle.jshell.net/jc73sjyn/
Вкратце: объект g содержит символы от a до z (в качестве ключей), и для каждого из них есть набор символов (также в виде ключей), каждый из которых представляет символ, который может следовать после него, а также процент вероятности , Там, где нет объекта, нет вероятности.
3 балла (4 буквы -> 3 оценки) умножаются, и слово со счетом 60 и выше считается реальным словом.
Пример: для слова «справиться» есть три поиска:
г [с] [о] = 20
г [о] [р] = 5
g [p] [e] = 20
оценка = 20 * 5 * 20 = 2000, что больше 60, так что один действителен.
(Я совершенно новичок в javascript, поэтому могут быть способы сделать его короче, чего я не знаю.)
Позднее редактирование:
К настоящему времени не имеет значения, но я оценил свой путь к более правильному g:
Новые результаты:
слова: 53 ошибки, не слова: 159 ошибок
http://fiddle.jshell.net/jc73sjyn/2/
источник
for
петли.w=>
на,function(w)
и это будет работать для любого браузера.Python 2, 5254 байта
Это решение разделяет добрые слова на две половины. Поиск сначала проверяет первые 2 символа, чтобы найти правильную строку, а затем ищет вторые 2 символа в этой строке. Не очень компактный, но быстрый в написании. Этот метод соответствует каждому слову без ошибок.
источник
C # WPF, 110
139Более короткие
Старый ответ
источник
var
и не вводя переменные без необходимости.Слово VBA, 25 байт
Функция анонимного непосредственного окна VBE, которая принимает входные данные в качестве текущего выбора и выводит, если это слово является логическим значением для непосредственного окна VBE.
Функция тестера
Приведенная ниже функция была использована для проверки вышеуказанной функции на тестовых примерах. Функция потерпела неудачу в 9,07% случаев (396 реальных слов и 10 поддельных слов)
источник
Mathematica, 33 байта
Эй, кто-то должен был это сделать!
Интуитивно понятный.
источник
Javascript ES6, 32 байта:
Используя регулярное выражение из ответа @ Sp3000 :
Это создает анонимную функцию. Чтобы использовать это, вы просто оборачиваете это вокруг
()
.Пример:
Это имеет точно такую же частоту отказов, как @ Sp3000, и возвращает
true
илиfalse
соответственно.Все кредиты из-за @ Sp3000 за то, что он позволил мне использовать его регулярное выражение.
источник
F = function(s) { return /[^aeiou]{3}|[jqxz]/.test(s) }
.