Напишіть програму або функцію, яка займає два входи:
- Текстове повідомлення
- Словник англійської мови, як він відображається в цьому файлі 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')