Insegni inglese come lingua straniera a studenti delle scuole superiori.
Hai deciso di basare tutto il tuo percorso sulle serie TV. Devi analizzare quali parole vengono usate e quanto spesso si ripetono.
Questo ti permetterà di scegliere le serie più semplici per iniziare e di aumentare gradualmente la difficoltà con il passare del tempo.
Il tuo compito è contare quante volte ogni parola compare in un sottotitolo di un dramma.
I sottotitoli di questi drammi usano solo caratteri ASCII.
I personaggi spesso parlano in un inglese colloquiale, usando contrazioni come they're o it's. Anche se queste contrazioni derivano da due parole (ad esempio we are), la contrazione (we're) è considerata un'unica parola.
Le parole possono essere separate da qualsiasi forma di punteggiatura (ad esempio ":", "!" o "?") o da spazi bianchi (ad esempio "\t", "\n" o " "). L'unica punteggiatura che non separa le parole è l'apostrofo nelle contrazioni.
I numeri sono considerati parole. Se i sottotitoli dicono It costs 100 dollars., allora 100 sarà una parola a sé.
Le parole non distinguono maiuscole e minuscole. Per esempio, la parola you compare tre volte nella frase seguente:
You come back, you hear me? DO YOU HEAR ME?
L'ordine dei conteggi delle parole nei risultati non ha importanza.
Ecco un esempio che racchiude diversi degli elementi discussi sopra:
"That's the password: 'PASSWORD 123'!", cried the Special Agent.\nSo I fled.
La mappatura per questo sottotitolo sarebbe:
123: 1
agent: 1
cried: 1
fled: 1
i: 1
password: 2
so: 1
special: 1
that's: 1
the: 2
Per completare questo esercizio devi implementare la funzione wordCount, che prende un testo e restituisce quante volte compare ogni parola.
Se è la prima volta che risolvi questo esercizio, ti consigliamo di attenerti alla firma fornita:
wordCount :: String -> [(String, Int)]
Più avanti, potrebbe essere una buona idea tornare su questo problema e giocare con altri tipi di dati e librerie:
Text, dal pacchetto text.Map, dal pacchetto containers.MultiSet, dal pacchetto multiset
La suite di test è stata progettata intenzionalmente per accettare quasi qualsiasi firma di tipo che abbia senso, quindi ti invitiamo a trovare quella che ritieni migliore.
Iscriviti a Exercism per imparare e padroneggiare Haskell con 107 esercizi e il mentoring di persone reali, tutto gratis.