Esta pregunta se basa en gran medida en esta pregunta , pero debería plantear una serie de dificultades adicionales.
Tu tarea
Debe escribir un programa o función que, al recibir una cadena, imprima todos los anagramas posibles de la misma. A los fines de esta pregunta, un anagrama es una cadena que contiene el mismo carácter que la cadena original, pero no es la cadena original. Un subanagrama es un anagrama de una subcadena de una cadena ingresada. Los anagramas y subanagramas no tienen que ser o contener palabras reales.
Entrada
Puede aceptar una cadena, que puede ser de cualquier longitud> 0, por cualquier método de entrada estándar. Puede contener caracteres ASCII.
Salida
Puede generar todos los anagramas y subanagramas posibles de la cadena ingresada de cualquier manera estándar. No debe generar la misma cadena dos veces, ni generar una cadena igual a la entrada.
Otras reglas
Las lagunas estándar no están permitidas
Puntuación
Este es el código de golf , gana menos bytes.
fuente
Respuestas:
05AB1E , 7 bytes
Una función que acepta una cadena de entrada y deja una lista de cadenas en la pila. Como programa completo, se imprime una representación de la lista.
Pruébalo en línea!
¿Cómo?
fuente
Brachylog (2), 7 bytes
Pruébalo en línea!
Explicación
fuente
(v2)
.Jalea , 9 bytes
Un enlace monádico que acepta una lista y devuelve una lista de todos los sub-anagramas distintos, excepto la entrada en sí.
Pruébalo en línea! (el pie de página imprime la lista resultante uniéndose a las nuevas líneas).
¿Cómo?
fuente
Pyth, 12
Prueba en línea .
fuente
Japt , 10 bytes
Pruébalo en línea!
Tengo que usar
à
,á
yâ
todo en una respuesta, en orden también. Qué casualidad...Explicación
fuente
Mathematica, 60 bytes
Permutations
toma un argumento numérico opcional que le indica cuántos de los valores de entrada usar para las permutaciones. Si le damos la longitud de la entrada, generará las permutaciones para todos los subconjuntos de la entrada sin duplicados. Todo lo que necesitamos hacer es eliminar la entrada.fuente
Java 8,
313312306 bytesVersión modificada de mi respuesta aquí , donde
p("",s,l);
ha sido reemplazada porfor(int z=s.length(),i=0,j;i<z;i++)for(j=i;j<z;p("",s.substring(i,j+++1),l));
-6 bytes gracias a @ OlivierGrégoire en mi respuesta vinculada.
Explicación de esta parte:
Pruébalo aquí.
fuente
Perl 6 , 75 bytes
Intentalo
Expandido:
fuente