Tarea
Su objetivo, si elige aceptarlo, es escribir un programa que, dada una cadena de entrada (o conjunto de caracteres), produzca todas las permutaciones posibles de las letras en esa cadena. Soy quisquilloso con mi salida, por lo que debe ordenarse alfabéticamente, sin duplicados.
Ejemplo:
Entrada: buzz
Salida:
buzz
bzuz
bzzu
ubzz
uzbz
uzzb
zbuz
zbzu
zubz
zuzb
zzbu
zzub
Reglas
- Este es el código de golf, por lo que gana el código más corto.
- Los espacios finales en cada / cualquier línea están bien
- Se permite una nueva línea después de la última línea (pero no más)
code-golf
string
permutations
Brian Gradin
fuente
fuente
["buzz" "bzuz" "bzzu" "ubzz" "uzbz" "uzzb" "zbuz" "zbzu" "zubz" "zuzb" "zzbu" "zzub"]
?N*
ap
) :-)Respuestas:
Jalea , 5 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E ,
43 bytesActualizado, desde una actualización para
œ
romper la versión anterior,que también salvó un byte como lo sugiere Magic Octopus Urn .
Pruébalo en línea!
Explicación
fuente
œê»
está bien para el no legado.œ
ahora devuelve una lista de cadenas en ambas.MATL , 4 bytes
Pruébalo en línea!
Explicación
fuente
Python 3.5, 79 bytes
Una función que toma entrada como una lista de caracteres y salidas imprimiendo.
Realiza recursivamente cada permutación distinta al tomar alfabéticamente cada uno de los siguientes caracteres posibles de los caracteres distintos restantes y agregarlos a la salida en progreso
w
. Luego, recurrimos con este personaje eliminado. Una vez que se vacía la entrada, imprimimosw
.fuente
CJam , 5 bytes
Gracias a @EriktheOutgolfer por una corrección (en
q
lugar der
)Pruébalo en línea!
Explicación
fuente
Pyth - 5 bytes
Pruébelo en línea aquí .
fuente
S
realmente necesario?Haskell, 46 bytes
2 bytes guardados gracias a nimi
fuente
f=
.J, 19 bytes
Caso de prueba
Explicación
Este es un tren de 4:
Básicamente:
fuente
[:~.i.@!@#A./:~
debería ahorrarte unos pocos bytesJavaScript (Firefox 30+),
129124bytesNo está mal para un idioma sin permutación incorporada ...
fuente
Python 3.5, 81 bytes:
Realmente ... 81 bytes cuando la siguiente respuesta más larga es 48 bytes ... suspiro . Bueno, intentaré este golf tanto como pueda, pero los consejos de golf todavía son muy apreciados.
Además, aquí está la solución más corta que pude obtener en Python 2 en 86 bytes :
Aparentemente en Python 2,
[*...]
devuelve aSyntax Error
, y comopermutations
devuelveitertools.permutations object at 0x...
, la siguiente forma más corta (que sé) de extraer las permutaciones únicas es usar{''.join(i)for i in permutations(f)}
wheref
es la cadena de entrada.Finalmente, tenga en cuenta que estas son funciones lambda y, por lo tanto, deben llamarse en el formato
print(<Function Name>(<Input String>))
.fuente
Mathematica,
3423 bytesLa entrada debe ser una lista de caracteres.
Explicación
Encuentre todas las permutaciones de la entrada, ordenadas y sin duplicados.
Imprimirlos uno por uno.
fuente
Brachylog , 9 bytes
Pruébalo en línea!
Explicación
fuente
Perl 6 ,
4944 bytesCadena como entrada
Lista de caracteres como entrada
Expandido
fuente
#perl6
canal freenode.net .».say
lugar de.map: *.put
».say
puede hacerlos en cualquier orden, y en un momento se hizo fuera de servicio a propósito.Brachylog (v2), 5 bytes
Pruébalo en línea!
Encuentra
ᵘ
niquep
ermutations de entrada, so
ellos, RTᵐ
APẉ
riteln (escritura con la nueva línea) sobre la matriz.fuente
Python 3,
7785 bytesAhora tipo!
fuente
from itertools import*
lo contrarioimport itertools as i
. Podrá guardar un byte reemplazándoloi.permutations
porpermutations
.{*...}
lugar deset(...)
ahorra dos bytes más.PowerShell v3 +, 171 bytes
PowerShell v3 introdujo el
-Unique
indicador en elSort-Object
cmdlet, por lo que es unos pocos bytes más corto que la versión v2 a continuación, ya que no necesitamosSelect
primero.Versión v2, 178 bytes:
PowerShell no tiene permutaciones integradas, por lo que tomé prestado mi código de Prime Factors Buddies y lo modifiqué ligeramente para usarlo aquí.
Esto es esencialmente tres porciones, que ampliaré a continuación.
param([char[]]$x)$a,$b=$x;$a=,$a
Toma la entrada$x
, lachar
convierte como una matriz, elimina la primera letra$a
y el resto$b
, y luego la vuelve a proyectar$a
como una matriz con el operador de coma.while($b){$z,$b=$b;$a+=$a|%{0..($y=($c="$_").Length)|%{-join($c[0..$_]+$z+$c[++$_..$y])};"$z$c";"$c$z"}}
Recorre las letras restantes ($b
), cada iteración toma la siguiente letra y la almacena$z
y la deja dentro$b
, luego concatena la matriz en$a
el resultado del envío$a
través de su propio bucle: cada elemento de$a
(almacenado temporalmente$c
) se repite propio.length
, y luego$z
se inserta en cada posición, incluso anteponer y anexar con$z$c
y$c$z
. Por ejemplo, para$c = '12'
y$z = '3'
, esto dará como resultado que'132','312','123'
se concatenen nuevamente$a
.La parte final
$a|?{$_.length-eq$x.count}|select -u|sort
toma cada elemento de$a
y usa laWhere-Object
cláusula para filtrar solo aquellos que tienen la misma longitud que la cadena de entrada, luegoselect
solo los-u
elementos nique y finalmentesort
los alfabéticamente. Todas las cadenas resultantes se dejan en la tubería, y la salida a través de lo implícitoWrite-Output
ocurre al finalizar el programa.fuente
|select -u|sort
a|sort -u
. Estoy bastante seguro de que 2.0 no tiene eso.JavaScript (ES6), 119 bytes
Donde
\n
representa el carácter literal de nueva línea. La respuesta del puerto de @ ETHproduction para usar cadenas en lugar de matrices. Invertir la salida, o mover la nueva línea al comienzo, ahorra 3 bytes.fuente
R, 113 bytes
Lee la entrada de stdin. Se
permute
supone que el paquete está instalado para llamar a laallPerms
función.Agregaré una explicación cuando llegue a casa del trabajo.
fuente
Java
302300 bytesUngolfed y código de prueba:
Pruébalo aquí
Entrada: prueba
Salida:
fuente
Raqueta 82 bytes
Sin golf:
Pruebas:
Ouput:
fuente
Groovy, 69 bytes
fuente
Ruby, 51 bytes
fuente
puts s.chars.permutation().map(&:join).uniq
43 Bytes
sin una definición previa.Actualmente , 8 bytes
Sugerencias de golf bienvenidas! Pruébalo en línea!
No golfista
fuente
Pip , 8 bytes
7 bytes de código, +1 para
-n
bandera.Toma una cadena como argumento de línea de comandos. Pruébalo en línea!
El escáner de Pip divide series de letras mayúsculas en pedazos de dos letras. Entonces, este código es
SS UQ PM a
--ieSortString(UniQue(PerMutations(a)))
,a
siendo la línea de comando arg. El-n
indicador garantiza que la lista de resultados esté separada por una nueva línea. Eso es todo al respecto.fuente
K (oK) , 14 bytes
Solución:
Pruébalo en línea!
Explicación:
Use la función de permutación incorporada,
prm
para generar permutaciones de longitud de la entrada, aplique estas permutaciones a la entrada, ordene alfabéticamente y luego tome valores distintos.fuente
Perl 5
-MList::Util=uniq -F
, 68 bytesPruébalo en línea!
fuente
Japt v2.0a0
-R
, 5 bytesIntentalo
fuente
û
es el método pas central; Creo que quisiste decirn
;)sort
en la barra de búsqueda de su intérprete e hice clic en el primero que encontré. Peroá
parece dar cada permutación en orden alfabético yaü
. Lo arreglaré mañana. Las permutaciones de "zumbido" se ordenan porque la palabra en sí es - intente con "zzub", por ejemplo.n
(es más fácil de escribir)C ++ (gcc) ,
132128bytesPruébalo en línea!
fuente
Almeja , 9 bytes
Explicación
fuente