Напишите программу или функцию, которая принимает два входа:
- Текстовое сообщение
- Словарь английского языка, как он появляется в этом файле Github (содержит около 60000 слов)
и выводит количество орфографических ошибок в сообщении (определение и тестовые случаи см. ниже).
Вы можете получить словарь в качестве параметра для вашей функции, в виде заранее определенного файла, который ваша программа ожидает найти, в виде жестко закодированных данных в вашем коде или любым другим разумным способом.
Ваш код должен выглядеть как текстовое сообщение с минимальным количеством орфографических ошибок. Таким образом, вы будете вычислять оценку вашего кода, передавая его себе в качестве входных данных.
Победителем становится код с наименьшим количеством баллов (минимально возможный балл равен 0). Если есть несколько ответов с одинаковым счетом, победитель определяется размером кода (в символах). Если два ответа все еще связаны, то победителем считается предыдущий.
При необходимости вы можете считать входное сообщение ASCII (байты 32 ... 126) с символами новой строки, закодированными обычным способом (1 байт "10" или 2 байта "13 10") и не пустыми. Однако, если ваш код имеет символы не ASCII, он также должен поддерживать ввод не ASCII (так что он может рассчитать свою собственную оценку).
Персонажи подразделяются на следующие классы:
- Буквы a ... z и A ... Z
- Пробел (определяется здесь как символ пробела или символ новой строки)
- пунктуация
.
,
;
:
!
?
- Приговор окончание
.
!
?
- Приговор окончание
- Мусор (все остальное)
Слово определяется как последовательность букв, которая является максимальным (т.е. ни предшествует , ни последовало письмо).
Предложение определяются как последовательность максимальных символов, которые не являются предложением окончания.
Символ является орфографической ошибкой, если он нарушает любое из правил орфографии:
- Буква должна принадлежать словарному слову (или, другими словами: каждое слово длины N, которое отсутствует в словаре, считается как N орфографических ошибок)
- Первый символ в предложении, игнорирующий любые начальные пробельные символы, должен быть заглавной буквой
- Все буквы должны быть строчными, кроме тех, которые указаны в предыдущем правиле
- Символ пунктуации разрешается только после буквы или мусора
- Символ новой строки допускается только после символа окончания предложения
- Пробельные символы недопустимы в начале сообщения и после пробельных символов
- Не должно быть мусора (или, другими словами: каждый символ мусора считается орфографической ошибкой)
Кроме того, последнее предложение должно быть либо пустым, либо состоять из ровно одного символа новой строки (т.е. сообщение должно заканчиваться символом окончания предложения и необязательным символом новой строки - назовем это правилом 8).
Контрольные примеры (ниже каждого символа - это правило, которое он нарушает; после =>
- требуемый ответ):
Here is my 1st test case!!
711 4 => 4
main(){puts("Hello World!");}
2 777 883 3 77 78 => 12
This message starts with two spaces
66 8 => 3
What ? No apostrophe's??
4 71 4 => 4
Extra whitespace is BAD!
66 661111111111 66 66333 => 21
Several
lines?
Must be used only to separate sentences.
=> 1 (first linebreak is en error: rule 5)
"Come here," he said.
73 7 => 3 (sentence starts with '"', not 'C')