Pig Latin

Pig Latin

Μέτριο

Εισαγωγή

Οι γονείς σου προκάλεσαν εσένα και το αδέρφι σου σε ένα παιχνίδι μπάσκετ δύο εναντίον δύο. Σίγουροι ότι θα κερδίσουν, σε άφησαν να βάλεις τους πρώτους δύο πόντους, αλλά μετά άρχισαν να κυριαρχούν στο παιχνίδι. Επειδή χρειάζεσαι λίγη ώθηση, αρχίζεις να μιλάς Pig Latin, μια επινοημένη παιδική γλώσσα που είναι δύσκολο να την καταλάβουν όσοι δεν είναι παιδιά. Αυτό θα σου δώσει το πλεονέκτημα για να νικήσεις τους γονείς σου!

Οδηγίες

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

  • φωνήεντα: τα γράμματα a, e, i, o και u
  • σύμφωνα: τα υπόλοιπα 21 γράμματα του αγγλικού αλφαβήτου

Κανόνας 1

Αν μια λέξη αρχίζει με φωνήεν ή ξεκινά με "xr" ή "yt", πρόσθεσε έναν ήχο "ay" στο τέλος της λέξης.

Για παράδειγμα:

  • "apple" -> "appleay" (αρχίζει με φωνήεν)
  • "xray" -> "xrayay" (ξεκινά με "xr")
  • "yttria" -> "yttriaay" (ξεκινά με "yt")

Κανόνας 2

Αν μια λέξη αρχίζει με ένα ή περισσότερα σύμφωνα, πρώτα μετακίνησε αυτά τα σύμφωνα στο τέλος της λέξης και μετά πρόσθεσε έναν ήχο "ay" στο τέλος της λέξης.

Για παράδειγμα:

  • "pig" -> "igp" -> "igpay" (αρχίζει με ένα σύμφωνο)
  • "chair" -> "airch" -> "airchay" (αρχίζει με πολλά σύμφωνα)
  • "thrush" -> "ushthr" -> "ushthray" (αρχίζει με πολλά σύμφωνα)

Κανόνας 3

Αν μια λέξη ξεκινά με μηδέν ή περισσότερα σύμφωνα που ακολουθούνται από "qu", πρώτα μετακίνησε αυτά τα σύμφωνα (αν υπάρχουν) και το τμήμα "qu" στο τέλος της λέξης και μετά πρόσθεσε έναν ήχο "ay" στο τέλος της λέξης.

Για παράδειγμα:

  • "quick" -> "ickqu" -> "ickquay" (ξεκινά με "qu", χωρίς σύμφωνα πριν)
  • "square" -> "aresqu" -> "aresquay" (ξεκινά με ένα σύμφωνο που ακολουθείται από "qu")

Κανόνας 4

Αν μια λέξη ξεκινά με ένα ή περισσότερα σύμφωνα που ακολουθούνται από "y", πρώτα μετακίνησε τα σύμφωνα που προηγούνται του "y" στο τέλος της λέξης και μετά πρόσθεσε έναν ήχο "ay" στο τέλος της λέξης.

Μερικά παραδείγματα:

  • "my" -> "ym" -> "ymay" (ξεκινά με ένα σύμφωνο που ακολουθείται από "y")
  • "rhythm" -> "ythmrh" -> "ythmrhay" (ξεκινά με πολλά σύμφωνα που ακολουθούνται από "y")

Υποδείξεις

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

Αυτή η άσκηση δουλεύει με δεδομένα κειμένου. Για ιστορικούς λόγους, ο τύπος String της Haskell είναι συνώνυμος με τον τύπο [Char], μια λίστα χαρακτήρων. Για πιο αποδοτικό χειρισμό δεδομένων κειμένου, μπορείς να χρησιμοποιήσεις τον τύπο Text.

Ως προαιρετική επέκταση αυτής της άσκησης, μπορείς να κάνεις τα παρακάτω:

  • Διάβασε για τους τύπους συμβολοσειρών στη Haskell.

  • Πρόσθεσε το - text στη λίστα εξαρτήσεών σου στο package.yaml.

  • Κάνε import το Data.Text με τον ακόλουθο τρόπο:

    import qualified Data.Text as T
    import           Data.Text (Text)
    
  • Μπορείς τώρα να γράψεις π.χ. translate :: Text -> Text και να αναφέρεσαι σε combinators του Data.Text ως π.χ. T.isSuffixOf.

  • Αναζήτησε την τεκμηρίωση για το Data.Text,

Αυτό το μέρος είναι εντελώς προαιρετικό.

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Haskell Exercism

Έτοιμος να ξεκινήσεις την άσκηση Pig Latin;

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

Αναλυτική ματιά στο Pig Latin!

Ρίχνουμε μια ματιά στο ταίριασμα προτύπων και τις κανονικές εκφράσεις, καθώς και σε μια ωραία λύση σε Prolog, και ρωτάμε: έλυσες την άσκηση ή απλώς κατάφερες να περάσουν τα tests;