Encontre as palavras que se encaixam nos fragmentos

Um quebra-cabeça popular consiste em receber uma lista de fragmentos de palavras e combiná-los para formar um conjunto de palavras, de modo que cada fragmento seja usado apenas uma vez.

Neste desafio, escreva uma função que receba uma lista de fragmentos e retorne uma lista ordenada de 20 palavras que possam ser formadas com eles.

Exemplo

find_words(["er", "haw", "as", "dock", "yuc", "prim", "ia", "sy", "sy", "y", "i", "thorn", "bur", "weed", "snow", "sia", "tus", "cac", "pop", "clo", "chid", "pan", "ris", "dahl", "rose", "dai", "drop", "dog", "ver", "bind", "heath", "fuch", "mine", "ca", "lil", "ter", "jas", "wood", "py", "or"])
➞ ["aster", "bindweed", "burdock", "cactus", "clover", "dahlia", "daisy", "dogwood", "fuchsia", "hawthorn", "heather", "iris", "jasmine", "lily", "orchid", "pansy", "poppy", "primrose", "snowdrop", "yucca"]

Notas

  • É necessário um dicionário para resolver este quebra-cabeça. Um conjunto de palavras DICTIONARY é fornecido nos testes; ele contém todas as palavras necessárias (além de algumas outras, por precaução e para tornar a tarefa um pouco mais desafiadora).
  • Você sempre deve retornar uma lista de 20 palavras ordenadas em ordem crescente.
  • A lista de fragmentos de entrada conterá 40 ou 60 fragmentos. Haverá dois fragmentos por palavra se a lista tiver 40 fragmentos; caso contrário, haverá três fragmentos por palavra.
  • Uma palavra será sempre apenas os fragmentos combinados, sem espaços ou hífens entre eles.
  • Os fragmentos não são necessariamente únicos dentro de uma lista de fragmentos.