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.
Data una parola obiettivo e una o più parole candidate, il tuo compito è trovare le candidate che sono anagrammi della parola obiettivo.
Un anagramma è un riarrangiamento di lettere che forma una nuova parola: ad esempio "owns" è un anagramma di "snow".
Una parola non è un anagramma di sé stessa: ad esempio, "stop" non è un anagramma di "stop".
La parola obiettivo e le parole candidate sono composte da uno o più caratteri alfabetici ASCII (A-Z e a-z).
I caratteri minuscoli e maiuscoli sono equivalenti: ad esempio, "PoTS" è un anagramma di "sTOp", ma "StoP" non è un anagramma di "sTOp".
Le parole che devi trovare vanno prese dalle parole candidate, rispettando la stessa combinazione di maiuscole e minuscole.
Data la parola obiettivo "stone" e le parole candidate "stone", "tones", "banana", "tons", "notes" e "Seton", le parole anagramma che devi trovare sono "tones", "notes" e "Seton".
I test saltati vicino alla fine di anagram_test.php sono obiettivi extra: sono opzionali.
Richiedono l'uso delle funzioni mb_string, che non sono installate di default in ogni versione di PHP.
Iscriviti a Exercism per imparare e padroneggiare PHP con 11 concetti122 esercizi e il mentoring di persone reali, tutto gratis.