Anagrama

Anagrama

Difícil

Introdução

Numa venda de garagem, você encontra uma linda máquina de escrever vintage por um preço de banana! Na empolgação, você corre para casa, coloca uma folha de papel e começa a digitar. Mas o ânimo passa quando você examina o resultado: todas as palavras saem embaralhadas! Por exemplo, ela imprime "stop" em vez de "post" e "least" em vez de "stale". Você tenta de novo, com cuidado, mas agora ela imprime "spot" e "slate". Depois de algumas tentativas, você descobre que há um atraso aleatório antes de cada letra ser impressa, o que bagunça a ordem. Agora você entende por que venderam a máquina por tão pouco dinheiro!

Você percebe que essa peculiaridade permite gerar anagramas, que são palavras formadas ao reorganizar as letras de outra palavra. Feliz com a descoberta, você passa o resto do dia gerando centenas de anagramas.

Instruções

Dada uma palavra-alvo e uma ou mais palavras candidatas, sua tarefa é encontrar as candidatas que são anagramas da palavra-alvo.

Um anagrama é o rearranjo das letras para formar uma nova palavra: por exemplo, "owns" é um anagrama de "snow". Uma palavra não é anagrama de si mesma: por exemplo, "stop" não é um anagrama de "stop".

A palavra-alvo e as palavras candidatas são formadas por um ou mais caracteres alfabéticos ASCII (A-Z e a-z). Letras minúsculas e maiúsculas são equivalentes: por exemplo, "PoTS" é um anagrama de "sTOp", mas "StoP" não é um anagrama de "sTOp". As palavras que você precisa encontrar devem ser tiradas das palavras candidatas, respeitando o uso de maiúsculas e minúsculas.

Dada a palavra-alvo "stone" e as palavras candidatas "stone", "tones", "banana", "tons", "notes" e "Seton", os anagramas que você precisa encontrar são "tones", "notes" e "Seton".

  • A coluna candidates contém uma lista de strings codificada em JSON. Exemplo:
    ["stone","tones","banana","tons","notes","Seton"]
    
  • A coluna result também deve conter uma lista de strings codificada em JSON.

Esquema da tabela

CREATE TABLE anagram (
  subject    TEXT NOT NULL,
  candidates TEXT NOT NULL,     -- json array of strings
  result     TEXT               -- json array of strings
);

Documentação do JSON

Funções e operadores de JSON

Editar via GitHub O link abre em uma nova janela ou aba
SQLite Exercism

Tudo pronto para começar Anagrama?

Crie sua conta no Exercism para aprender e dominar SQLite com 81 exercícios e mentoria humana de verdade, tudo de graça.