Escriba un programa o función que tome dos entradas:
- Un mensaje de texto
- El diccionario del idioma inglés, tal como aparece en este archivo Github (que contiene aproximadamente 60000 palabras)
y genera el número de errores ortográficos en el mensaje (consulte a continuación la definición y los casos de prueba).
Puede recibir el diccionario como un parámetro para su función, como un archivo predefinido que su programa espera encontrar, como datos codificados en su código o de cualquier otra manera sensata.
Su código debería verse como un mensaje de texto, con un número mínimo de errores ortográficos. Por lo tanto, calculará la puntuación de su código al alimentarlo como entrada.
El ganador es el código que tiene la puntuación más baja (la puntuación mínima posible es 0). Si hay varias respuestas con la misma puntuación, el ganador se decide por el tamaño del código (en caracteres). Si todavía hay dos respuestas empatadas, el ganador es el primero.
Si es necesario, puede suponer que el mensaje de entrada es ASCII (bytes 32 ... 126) con líneas nuevas codificadas de manera convencional (1 byte "10" o 2 bytes "13 10") y no vacío. Sin embargo, si su código tiene caracteres no ASCII, también debe admitir entradas no ASCII (para que pueda calcular su propia puntuación).
Los personajes se subdividen en las siguientes clases:
- Letras a ... z y A ... Z
- Espacio en blanco (definido aquí como el carácter de espacio o el carácter de nueva línea)
- Puntuación
.
,
;
:
!
?
- Final de oración
.
!
?
- Final de oración
- Basura (todo lo demás)
Una palabra se define como una secuencia de letras, que es máxima (es decir, ni precedida ni seguida de una letra).
Una oración se define como una secuencia máxima de caracteres que no terminan la oración.
Un carácter es un error ortográfico si viola alguna de las reglas ortográficas:
- Una letra debe pertenecer a una palabra del diccionario (o, en otras palabras: cada palabra de longitud N que no aparece en el diccionario cuenta como N errores ortográficos)
- El primer carácter de una oración, que ignora los caracteres de espacio en blanco iniciales, debe ser una letra mayúscula
- Todas las letras deben estar en minúsculas, excepto las especificadas por la regla anterior.
- Un carácter de puntuación solo se permite después de una letra o basura
- Un carácter de nueva línea solo se permite después de un carácter que termina la oración
- Los caracteres de espacio en blanco no están permitidos al comienzo del mensaje y después de los caracteres de espacio en blanco
- No debería haber basura (o, en otras palabras: cada carácter de basura cuenta es un error ortográfico)
Además, la última oración debe estar vacía o consistir exactamente en un carácter de nueva línea (es decir, el mensaje debe terminar con un carácter de finalización de oración y una nueva línea opcional; llamémosla regla 8).
Casos de prueba (debajo de cada carácter hay una regla que infringe; después =>
está la respuesta requerida):
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')