Napisz program lub funkcję, która pobiera dwa dane wejściowe:
- Wiadomość tekstowa
- Słownik języka angielskiego, jak się pojawia w tym pliku Github (zawierający około 60000 słów)
i wyświetla liczbę błędów ortograficznych w komunikacie (patrz definicja i przypadki testowe poniżej).
Możesz otrzymać słownik jako parametr swojej funkcji, jako wstępnie zdefiniowany plik, który program spodziewa się znaleźć, jako zakodowane dane w kodzie lub w inny rozsądny sposób.
Twój kod powinien wyglądać jak wiadomość tekstowa z minimalną liczbą błędów ortograficznych. Więc obliczysz wynik swojego kodu, wprowadzając go do siebie jako dane wejściowe.
Zwycięzcą jest kod, który ma najniższy wynik (minimalny możliwy wynik to 0). Jeśli istnieje kilka odpowiedzi o tym samym wyniku, o zwycięzcy decyduje rozmiar kodu (w znakach). Jeśli dwie odpowiedzi są nadal powiązane, zwycięzcą jest ta wcześniejsza.
W razie potrzeby można założyć, że komunikat wejściowy to ASCII (bajty 32 ... 126) z znakami nowej linii zakodowanymi w konwencjonalny sposób (1 bajt „10” lub 2 bajty „13 10”) i niepuste. Jeśli jednak kod zawiera znaki spoza ASCII, powinien również obsługiwać dane wejściowe spoza ASCII (aby mógł obliczyć swój wynik).
Znaki są podzielone na następujące klasy:
- Litery a ... z oraz A ... Z
- Biała spacja (zdefiniowana tutaj jako znak spacji lub znak nowej linii)
- Interpunkcja
.
,
;
:
!
?
- Zakończenie zdania
.
!
?
- Zakończenie zdania
- Śmieci (cała reszta)
Słowo jest zdefiniowany jako ciąg liter, który jest maksymalny (tj poprzedzone ani nie występuje litera).
Zdanie jest zdefiniowany jako sekwencja maksymalnej znaków, które nie są zdanie kończy.
Postać jest błędem w pisowni, jeśli narusza którąkolwiek z zasad pisowni:
- Litera musi należeć do słowa w słowniku (lub innymi słowy: każde słowo o długości N, które nie pojawia się w słowniku, liczy się jako N błędów ortograficznych)
- Pierwszy znak w zdaniu, ignorując początkowe białe znaki, musi być wielką literą
- Wszystkie litery muszą być małe, z wyjątkiem tych określonych w poprzedniej regule
- Znak interpunkcyjny jest dozwolony tylko po literze lub śmieciach
- Znak nowej linii jest dozwolony tylko po znaku kończącym zdanie
- Znaki białych znaków są niedozwolone na początku wiadomości i po znakach białych znaków
- Nie powinno być śmieci (lub innymi słowy: każdy znak śmieci się liczy jest błędem pisowni)
Ponadto ostatnie zdanie musi być puste lub zawierać dokładnie jeden znak nowej linii (tzn. Wiadomość powinna kończyć się znakiem kończącym zdanie i opcjonalnym znakiem nowej linii - nazwijmy to regułą 8).
Przypadki testowe (poniżej każdej postaci znajduje się reguła, którą narusza; po =>
jest wymagana odpowiedź):
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')