Track
/
Haskell
Haskell
/
Esercizi
/
Pig Latin
Pig Latin

Pig Latin

Medio

Introduzione

I tuoi genitori hanno sfidato te e un tuo fratello o una tua sorella a una partita di basket due contro due. Sicuri di vincere, ti lasciano segnare un paio di punti, ma poi prendono il sopravvento. Hai bisogno di una piccola spinta, così inizi a parlare in Pig Latin, una lingua inventata per bambini che è difficile da capire per chi non è più bambino. Questo ti darà il vantaggio che ti serve per avere la meglio sui tuoi genitori!

Istruzioni

Il tuo compito è tradurre del testo dall'inglese al Pig Latin. La traduzione è definita da quattro regole, che esaminano la sequenza di vocali e consonanti all'inizio di una parola. Queste regole considerano l'uso delle vocali e delle consonanti in ogni parola:

  • vocali: le lettere a, e, i, o e u
  • consonanti: le altre 21 lettere dell'alfabeto inglese

Regola 1

Se una parola inizia con una vocale, oppure inizia con "xr" o "yt", aggiungi un suono "ay" alla fine della parola.

Per esempio:

  • "apple" -> "appleay" (inizia con una vocale)
  • "xray" -> "xrayay" (inizia con "xr")
  • "yttria" -> "yttriaay" (inizia con "yt")

Regola 2

Se una parola inizia con una o più consonanti, sposta prima quelle consonanti alla fine della parola, poi aggiungi un suono "ay" alla fine della parola.

Per esempio:

  • "pig" -> "igp" -> "igpay" (inizia con una sola consonante)
  • "chair" -> "airch" -> "airchay" (inizia con più consonanti)
  • "thrush" -> "ushthr" -> "ushthray" (inizia con più consonanti)

Regola 3

Se una parola inizia con zero o più consonanti seguite da "qu", sposta prima quelle consonanti (se ci sono) e la parte "qu" alla fine della parola, poi aggiungi un suono "ay" alla fine della parola.

Per esempio:

  • "quick" -> "ickqu" -> "ickquay" (inizia con "qu", nessuna consonante che precede)
  • "square" -> "aresqu" -> "aresquay" (inizia con una consonante seguita da "qu")

Regola 4

Se una parola inizia con una o più consonanti seguite da "y", sposta prima le consonanti che precedono la "y" alla fine della parola, poi aggiungi un suono "ay" alla fine della parola.

Alcuni esempi:

  • "my" -> "ym" -> "ymay" (inizia con una sola consonante seguita da "y")
  • "rhythm" -> "ythmrh" -> "ythmrhay" (inizia con più consonanti seguite da "y")

Suggerimenti

Gli unit test forniscono esempi di parole. Prova a raggruppare le consonanti indipendentemente dalle combinazioni specifiche di consonanti presenti negli unit test.

Questo esercizio lavora con dati testuali. Per ragioni storiche, il tipo String di Haskell è sinonimo di [Char], un array di caratteri. Per gestire i dati testuali in modo più efficiente, si può usare il tipo Text.

Come estensione facoltativa di questo esercizio, puoi:

  • Leggere qualcosa sui tipi di stringa in Haskell.

  • Aggiungere - text alla lista delle dipendenze in package.yaml.

  • Importare Data.Text nel modo seguente:

    import qualified Data.Text as T
    import           Data.Text (Text)
    
  • Ora puoi scrivere per esempio translate :: Text -> Text e riferirti ai combinatori di Data.Text come per esempio T.isSuffixOf.

  • Consultare la documentazione di Data.Text,

Questa parte è del tutto facoltativa.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Haskell Exercism

Vuoi iniziare Pig Latin?

Iscriviti a Exercism per imparare e padroneggiare Haskell con 107 esercizi e il mentoring di persone reali, tutto gratis.

Approfondimento su Pig Latin!

Diamo un'occhiata al pattern matching e alle espressioni regolari, oltre a una bella soluzione in Prolog, e ci chiediamo: hai risolto l'esercizio o hai solo fatto passare i test?