Scrivi un programma o una funzione che accetta due input:
- Un messaggio di testo
- Il dizionario della lingua inglese, come appare in questo file Github (contenente circa 60000 parole)
e genera il numero di errori di ortografia nel messaggio (vedi sotto per la definizione e i casi di test).
Puoi ricevere il dizionario come parametro per la tua funzione, come file predefinito che il tuo programma si aspetta di trovare, come dati hardcoded nel tuo codice, o in qualsiasi altro modo ragionevole.
Il tuo stesso codice dovrebbe apparire come un messaggio di testo, con un numero minimo di errori di ortografia. Quindi, calcolerai il punteggio del tuo codice alimentandolo a se stesso come input.
Il vincitore è il codice che ha il punteggio più basso (il punteggio minimo possibile è 0). Se ci sono più risposte con lo stesso punteggio, il vincitore viene deciso dalla dimensione del codice (in caratteri). Se due risposte sono ancora in parità, il vincitore è il primo.
Se necessario, si può presumere che il messaggio di input sia ASCII (byte 32 ... 126) con le nuove righe codificate in modo convenzionale (1 byte "10" o 2 byte "13 10") e non vuoto. Tuttavia, se il tuo codice ha caratteri non ASCII, dovrebbe supportare anche input non ASCII (in modo da poter calcolare il proprio punteggio).
I personaggi sono suddivisi nelle seguenti classi:
- Lettere a ... z e A ... Z
- Spazio bianco (definito qui come il carattere spazio o il carattere di nuova riga)
- Punteggiatura
.
,
;
:
!
?
- Frase fine
.
!
?
- Frase fine
- Immondizia (tutto il resto)
Una parola è definita come una sequenza di lettere, che è massima (cioè né preceduta né seguita da una lettera).
Una frase è definita come una sequenza massima di caratteri che non terminano la frase.
Un personaggio è un errore di ortografia se viola una delle regole di ortografia:
- Una lettera deve appartenere a una parola del dizionario (o, in altre parole: ogni parola di lunghezza N che non appare nel dizionario conta come N errori di ortografia)
- Il primo carattere di una frase, ignorando qualsiasi carattere iniziale di spazio bianco, deve essere una lettera maiuscola
- Tutte le lettere devono essere minuscole, tranne quelle specificate dalla regola precedente
- Un carattere di punteggiatura è consentito solo dopo una lettera o immondizia
- Un carattere di nuova riga è consentito solo dopo un carattere che termina la frase
- I caratteri di spazi bianchi non sono consentiti all'inizio del messaggio e dopo i caratteri di spazi bianchi
- Non dovrebbe esserci immondizia (o, in altre parole: ogni carattere di immondizia conta è un errore di ortografia)
Inoltre, l'ultima frase deve essere vuota o consistere esattamente di un carattere di nuova riga (cioè il messaggio dovrebbe terminare con un carattere di fine frase e una nuova riga opzionale - chiamiamola regola 8).
Casi di prova (sotto ogni personaggio c'è una regola che viola; dopo =>
è la risposta richiesta):
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')