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.
Dada uma palavra-alvo e uma ou mais palavras candidatas, a tua tarefa é encontrar as 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 é um anagrama de si própria: por exemplo, "stop" não é um anagrama de "stop".
A palavra-alvo e as palavras candidatas são compostas por um ou mais carateres alfabéticos ASCII (A-Z e a-z).
Os carateres em minúscula e em maiúscula são equivalentes: por exemplo, "PoTS" é um anagrama de "sTOp", mas "StoP" não é um anagrama de "sTOp".
As palavras que precisas de encontrar devem ser retiradas das palavras candidatas, com as mesmas maiúsculas e minúsculas.
Dada a palavra-alvo "stone" e as palavras candidatas "stone", "tones", "banana", "tons", "notes" e "Seton", os anagramas que precisas de encontrar são "tones", "notes" e "Seton".
Cada conjunto de palavras é representado como uma string terminada em null, com um caráter de nova linha no fim de cada palavra.
Tens de devolver os anagramas pela mesma ordem em que aparecem nas palavras candidatas.
Um exemplo seria "tones\nnotes\nSeton\n"
| Registo | Utilização | Tipo | Descrição |
|---|---|---|---|
$a0 |
entrada | endereço | string de destino terminada em null, sem nova linha |
$a1 |
entrada | endereço | string de candidatos terminada em null, com nova linha depois de cada palavra |
$a2 |
entrada/saída | endereço | string de saída terminada em null, com nova linha depois de cada palavra |
$t0-9 |
temporário | qualquer | para armazenamento temporário |
Inscreve-te no Exercism para aprenderes e dominares MIPS Assembly com 70 exercícios, e mentoria humana real, tudo grátis.