Διαδρομές
/
Haskell
Haskell
/
Ασκήσεις
/
Μέτρηση λέξεων
Μέτρηση λέξεων

Μέτρηση λέξεων

Μέτριο

Εισαγωγή

Διδάσκεις αγγλικά ως ξένη γλώσσα σε μαθητές λυκείου.

Έχεις αποφασίσει να βασίσεις όλο το πρόγραμμα σπουδών σου σε τηλεοπτικές εκπομπές. Πρέπει να αναλύσεις ποιες λέξεις χρησιμοποιούνται και πόσο συχνά επαναλαμβάνονται.

Αυτό θα σου επιτρέψει να επιλέξεις τις πιο απλές εκπομπές για να ξεκινήσεις και να αυξήσεις σταδιακά τη δυσκολία όσο περνάει ο καιρός.

Οδηγίες

Η αποστολή σου είναι να μετρήσεις πόσες φορές εμφανίζεται κάθε λέξη σε έναν υπότιτλο μιας δραματικής σειράς.

Οι υπότιτλοι αυτών των σειρών χρησιμοποιούν μόνο χαρακτήρες ASCII.

Οι ήρωες συχνά μιλούν σε ανεπίσημα αγγλικά, χρησιμοποιώντας συνηρημένους τύπους όπως they're ή it's. Αν και αυτοί οι συνηρημένοι τύποι προέρχονται από δύο λέξεις (π.χ. we are), ο συνηρημένος τύπος (we're) θεωρείται μία μόνο λέξη.

Οι λέξεις μπορούν να χωρίζονται με οποιαδήποτε μορφή στίξης (π.χ. ":", "!" ή "?") ή κενού διαστήματος (π.χ. "\t", "\n" ή " "). Η μόνη στίξη που δεν χωρίζει λέξεις είναι η απόστροφος στους συνηρημένους τύπους.

Οι αριθμοί θεωρούνται λέξεις. Αν ο υπότιτλος λέει It costs 100 dollars. τότε το 100 θα είναι ξεχωριστή λέξη.

Στις λέξεις δεν έχει σημασία αν είναι πεζά ή κεφαλαία. Για παράδειγμα, η λέξη you εμφανίζεται τρεις φορές στην παρακάτω πρόταση:

You come back, you hear me? DO YOU HEAR ME?

Η σειρά με την οποία εμφανίζονται οι λέξεις στα αποτελέσματα δεν έχει σημασία.

Ακολουθεί ένα παράδειγμα που συνδυάζει αρκετά από τα στοιχεία που συζητήσαμε παραπάνω:

  • απλές λέξεις
  • συνηρημένους τύπους
  • αριθμούς
  • λέξεις που δεν επηρεάζονται από πεζά ή κεφαλαία γράμματα
  • στίξη (συμπεριλαμβανομένων των αποστρόφων) για τον χωρισμό των λέξεων
  • διαφορετικές μορφές κενού διαστήματος για τον χωρισμό των λέξεων

"That's the password: 'PASSWORD 123'!", cried the Special Agent.\nSo I fled.

Η αντιστοίχιση για αυτόν τον υπότιτλο θα ήταν:

123: 1
agent: 1
cried: 1
fled: 1
i: 1
password: 2
so: 1
special: 1
that's: 1
the: 2

Υποδείξεις

Για να ολοκληρώσεις αυτή την άσκηση, πρέπει να υλοποιήσεις τη συνάρτηση wordCount, η οποία παίρνει ένα κείμενο και επιστρέφει πόσες φορές εμφανίζεται κάθε λέξη.

Αν λύνεις αυτή την άσκηση για πρώτη φορά, καλό είναι να μείνεις στην υπογραφή που δίνεται:

wordCount :: String -> [(String, Int)]

Αργότερα, ίσως είναι καλή ιδέα να ξαναδείς αυτό το πρόβλημα και να παίξεις με άλλους τύπους δεδομένων και βιβλιοθήκες:

  • Text, από το πακέτο text.
  • Map, από το πακέτο containers.
  • MultiSet, από το πακέτο multiset

Η σουίτα δοκιμών σχεδιάστηκε σκόπιμα ώστε να δέχεται σχεδόν οποιαδήποτε υπογραφή τύπου έχει νόημα, οπότε σε ενθαρρύνουμε να βρεις αυτή που θεωρείς καλύτερη.


Πηγή

Αυτό είναι ένα κλασικό προβληματάκι, αλλά μας το θύμισε το Go Tour.
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Haskell Exercism

Έτοιμος να ξεκινήσεις την άσκηση Μέτρηση λέξεων;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Haskell με 107 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.