Ver también: Granma ama a Ana
Se le dará una cadena de letras minúsculas ASCII. Usando este archivo de diccionario (ACTUALIZADO), su tarea es resolver el anagrama. Para resolver un anagrama, debe generar todas las palabras o grupos de palabras que se pueden formar usando cada letra de la cadena de entrada exactamente una vez, separadas por nuevas líneas. Los grupos de las mismas palabras en un orden diferente no son únicos y no se deben generar por separado; sin embargo, el orden de las palabras no importa . El orden de las soluciones de salida tampoco importa . Si la entrada no puede formar una palabra, no genera nada.
Algunos casos de prueba útiles:
Input: viinlg
Output: living
Input: fceodglo
Output: code golf
Input: flogflog
Output: golf golf
Input: ahwhygi
Output: highway
high way
Input: bbbbbb
Output:
Reglas / advertencias:
Puede acceder a la lista de diccionarios de la forma que desee. Se aceptan argumentos de línea de comando, stdin, lectura de archivos o lectura de internet.
La entrada consistirá únicamente en letras minúsculas ASCII. No es necesario que genere resultados en ningún caso en particular.
No se le dará una cadena que ya forma una palabra válida (sin embargo, se le puede dar una cadena que forma varias palabras, como
bluehouse
).Las nuevas líneas finales están permitidas pero no son obligatorias.
Se aplican lagunas estándar.
Este es el código de golf . El código más corto en bytes gana. ¡Buena suerte!
fuente
Respuestas:
Python 2 ,
341327337320 bytesEsta solución supone que el diccionario se almacena en una variable
w
como un conjunto de cadenas.combinations
No es necesario usar el primer conjunto decombinations_with_replacement
, pero el uso de este último ahorra bytes.Pruébalo en línea!
Entrada: palabra anagramada seguida del diccionario de palabras como un conjunto:
Editar: entradas actualizadas.
fuente
Python 3 ,
248202bytesPruébalo en línea!
La entrada es la siguiente:
Acelerándolo:
Para fines de prueba, si cambia de
I,*S=iter(input,'')
aI=input();S=set(iter(input,''))
, el tiempo de ejecución se reducirá drásticamente y la salida será la misma.Explicación:
En cada permutación de la entrada, intenta dividir recursivamente la permutación en todas las ubicaciones posibles, comenzando de izquierda a derecha, sin omitir letras, con palabras que están en el diccionario. Si una combinación dividida coincide con toda la permutación de entrada, las palabras divididas se ordenan y se agregan a una
set
que se imprimirá en y de la evaluación.fuente
Javascript,
139137129 Bytes-2 Bytes gracias a @FelipeNardiBatista
-8 Bytes gracias a la lectura de los documentos;)
Toma el diccionario como entrada en forma de una matriz de cadenas.
Explicación:
Para cada palabra en el diccionario, verifique si cada letra está contenida en la palabra elegida, al tiempo que la elimina de la palabra. Al final de cada entrada del diccionario, restaure la palabra a su estado inalterado para verificar si hay más coincidencias.
fuente