Veja também: Granma ama Ana
Você receberá uma sequência de letras ASCII em minúsculas. Usando este arquivo de dicionário (ATUALIZADO), sua tarefa é resolver o anagrama. Para resolver um anagrama, você deve imprimir todas as palavras ou grupos de palavras que podem ser formadas usando cada letra da sequência de entrada exatamente uma vez, separadas por novas linhas. Grupos das mesmas palavras em uma ordem diferente não são exclusivos e não devem ser exibidos separadamente; no entanto, a ordem das palavras não importa . A ordem das soluções de saída também não importa . Se a entrada não puder formar uma palavra, não produza nada.
Alguns casos de teste úteis:
Input: viinlg
Output: living
Input: fceodglo
Output: code golf
Input: flogflog
Output: golf golf
Input: ahwhygi
Output: highway
high way
Input: bbbbbb
Output:
Regras / advertências:
Você pode acessar a lista de dicionários da maneira que desejar. Argumentos na linha de comando, stdin, leitura de arquivo ou leitura da Internet são aceitáveis.
A entrada consistirá apenas em letras ASCII minúsculas. Você não é obrigado a produzir resultados em nenhum caso específico.
Você não receberá uma sequência que já forma uma palavra válida (você pode, no entanto, receber uma sequência que forma várias palavras, como
bluehouse
).Novas linhas à direita são permitidas, mas não necessárias.
Aplicam-se brechas padrão.
Isso é código-golfe . O menor código em bytes vence. Boa sorte!
fonte
Respostas:
Python 2 ,
341327337320 bytesEsta solução supõe que o dicionário seja armazenado em uma variável
w
como um conjunto de seqüências de caracteres. O primeiro conjunto decombinations
não precisa ser usadocombinations_with_replacement
, mas o último salva bytes.Experimente online!
Entrada - Palavra anagramas seguida pelo dicionário de palavras como um conjunto:
Editar: entradas atualizadas.
fonte
Python 3 ,
248202 bytesExperimente online!
A entrada é a seguinte:
Acelerando:
Para fins de teste, se você mudar de
I,*S=iter(input,'')
paraI=input();S=set(iter(input,''))
, o tempo de execução será reduzido drasticamente e a saída será a mesma.Explicação:
Em toda permutação da entrada, ela tenta dividir recursivamente a permutação em todos os locais possíveis, começando da esquerda para a direita, sem pular letras, com palavras que estão no dicionário. Se uma combinação dividida corresponder a toda a permutação de entrada, as palavras divididas serão classificadas e adicionadas a uma
set
que será impressa na e da avaliação.fonte
Javascript,
139137129 bytes-2 Bytes graças a @FelipeNardiBatista
-8 bytes graças à leitura dos documentos;)
Recebe no dicionário como entrada na forma de uma matriz de seqüências de caracteres.
Explicação:
Para cada palavra no dicionário, verifique se todas as letras estão contidas na palavra escolhida e, ao mesmo tempo, remova-a da palavra. No final de cada entrada do dicionário, restaure a palavra no estado inalterado para verificar se há outras correspondências.
fonte