Numa venda de garagem, encontras uma bela máquina de escrever vintage a um preço de saldo! Com entusiasmo, corres para casa, colocas uma folha de papel e começas a escrever à máquina. No entanto, o teu entusiasmo esmorece quando examinas o resultado: todas as palavras saem baralhadas! Por exemplo, imprime "stop" em vez de "post" e "least" em vez de "stale". Com cuidado, tentas outra vez, mas agora imprime "spot" e "slate". Depois de algumas experiências, descobres que há um atraso aleatório antes de cada letra ser impressa. Isso baralha a ordem. Agora percebes porque é que a venderam por tão pouco dinheiro!
Percebes que esta peculiaridade te permite gerar anagramas, que são palavras formadas ao reorganizar as letras de outra palavra. Contente com a tua descoberta, passas o resto do dia a gerar centenas de anagramas.
A tua tarefa é, dada uma palavra alvo e um conjunto de palavras candidatas, encontrar o subconjunto de candidatas que são anagramas da palavra alvo.
Um anagrama é um rearranjo de letras que forma uma nova palavra: por exemplo, "owns" é um anagrama de "snow".
Uma palavra não é anagrama de si própria: por exemplo, "stop" não é um anagrama de "stop".
A palavra alvo e as candidatas são palavras formadas por um ou mais carateres alfabéticos ASCII (A-Z e a-z).
Os carateres minúsculos e maiúsculos são equivalentes: por exemplo, "PoTS" é um anagrama de "sTOp", mas StoP não é um anagrama de sTOp.
O conjunto de anagramas é o subconjunto do conjunto de candidatos que são anagramas da palavra alvo (por qualquer ordem).
As palavras do conjunto de anagramas devem ter as mesmas maiúsculas e minúsculas que no conjunto de candidatos.
Dada a palavra alvo "stone" e as candidatas "stone", "tones", "banana", "tons", "notes", "Seton", o conjunto de anagramas é "tones", "notes", "Seton".
Tens de devolver os anagramas pela mesma ordem em que estão listados nas palavras candidatas.
Inscreve-te no Exercism para aprenderes e dominares Delphi Pascal com 76 exercícios, e mentoria humana real, tudo grátis.