Track
/
Haskell
Haskell
/
Esercizi
/
Anagramma
Anagramma

Anagramma

Medio

Introduzione

A una vendita in garage trovi una splendida macchina da scrivere vintage a un prezzo d'occasione! Tutto emozionato, corri a casa, inserisci un foglio di carta e cominci a scrivere. Però l'entusiasmo svanisce quando esamini l'output: tutte le parole sono incomprensibili! Per esempio, stampa «stop» invece di «post» e «least» invece di «stale». Provi di nuovo con attenzione, ma ora stampa «spot» e «slate». Dopo qualche prova, scopri che c'è un ritardo casuale prima che ogni lettera venga stampata, il che scombina l'ordine. Ora capisci perché te l'hanno venduta per così pochi soldi!

Ti rendi conto che questo strano comportamento ti permette di generare anagrammi, cioè parole formate riordinando le lettere di un'altra parola. Felice della tua scoperta, passi il resto della giornata a generare centinaia di anagrammi.

Istruzioni

Il tuo compito è trovare, data una parola obiettivo e un insieme di parole candidate, il sottoinsieme dei candidati che sono anagrammi della parola obiettivo.

Un anagramma è un riarrangiamento di lettere che forma una nuova parola: per esempio, "owns" è un anagramma di "snow". Una parola non è un anagramma di se stessa: per esempio, "stop" non è un anagramma di "stop".

La parola obiettivo e i candidati sono parole di uno o più caratteri alfabetici ASCII (A-Z e a-z). I caratteri minuscoli e maiuscoli sono equivalenti: per esempio, "PoTS" è un anagramma di "sTOp", ma StoP non è un anagramma di sTOp. L'insieme degli anagrammi è il sottoinsieme dell'insieme dei candidati che sono anagrammi della parola obiettivo (in qualsiasi ordine). Le parole nell'insieme degli anagrammi devono avere lo stesso uso di maiuscole e minuscole dei candidati.

Dati la parola obiettivo "stone" e i candidati "stone", "tones", "banana", "tons", "notes", "Seton", l'insieme degli anagrammi è "tones", "notes", "Seton".

Suggerimenti

Per completare questo esercizio devi implementare la funzione anagramsFor, che prende una parola e un gruppo di parole e restituisce quelle che sono anagrammi della parola data.

Devi restituire gli anagrammi nello stesso ordine in cui sono elencati nelle parole candidate.

Se è la prima volta che risolvi questo esercizio, ti consigliamo di attenerti alla firma fornita:

anagramsFor :: String -> [String] -> [String]

Più avanti, potrebbe essere una buona idea riprendere questo problema e giocare con altri tipi di dati e librerie:

  • Text, dal pacchetto text.
  • Sequence e Set, dal pacchetto containers.
  • MultiSet, dal pacchetto multiset

La suite di test è stata progettata intenzionalmente per accettare quasi qualsiasi firma di tipo abbia senso, quindi ti invitiamo a trovare quella che ritieni migliore.

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

Vuoi iniziare Anagramma?

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