Para este desafío, hará una función (su función puede ser un programa completo) que toma una lista como entrada y devuelve una permutación de esa lista. Su función debe obedecer los siguientes requisitos.
Debe ser determinista.
Al componer su función consigo mismo un número variable de veces debería ser capaz de obtener una lista de cualquiera de sus permutaciones.
Esta es una pregunta de código de golf, por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
Reglas adicionales
Usted puede tomar cualquier tipo de lista, (
[Integer]
,[String]
,[[Integer]]
), siempre y cuando- Puede estar no vacío
- Puede contener objetos distintos con al menos 16 valores posibles. (No puede usar un Haskell
[()]
y afirmar que su función esid
) - Puede contener objetos duplicados (sin conjuntos)
Puede escribir un programa o una función, pero debe obedecer el estándar IO.
code-golf
permutations
Ad Hoc Garf Hunter
fuente
fuente
S_n
es solo cíclico paran<3
next_permutation
función.Respuestas:
CJam (11 bytes)
Demostración en línea que muestra el ciclo completo de una lista de cuatro elementos con un elemento duplicado.
Disección
fuente
Mathematica + Combinatorica (paquete incorporado) 34 bytes
19 bytes para cargar el paquete y 15 para la función.
Uso:
Sin el incorporado, 61 Bytes
Se supone que Combinatorica está completamente incorporada en Mathematica, pero creo que se pasó por alto la función NextPermutation.
fuente
Python 3 , 90 bytes
Pruébalo en línea!
fuente
C ++, 42 bytes
Esta operación exacta está integrada en C ++.
fuente
#include
?JavaScript (ES6),
145139137134108 bytes¡Ahorré la friolera de 25 bytes gracias a @Neil!
Toma la entrada como una matriz de caracteres alfabéticos. Devuelve la siguiente permutación como otra matriz.
¿Cómo?
Esta es una generación en orden lexicográfico que procesa los 4 pasos siguientes en cada iteración:
Encuentre el índice X más grande tal que a [X] <a [X + 1]
Encuentre el índice más grande Y mayor que X tal que a [Y]> a [X]
Cambie el valor de una [X] con el de una [Y]
Ordenar la secuencia desde un [X + 1] hasta el elemento final incluido, en orden lexicográfico ascendente
Ejemplo:
Manifestación
Mostrar fragmento de código
fuente
v<a[i+1]&&(t=v,x=i)
ahorra un byte, y es posible que pueda ahorrar más usandosplice
dos en lugar de dosslice
.map
s también, para 112 bytes:a=>(t=x=y=-1,a.map((v,i)=>v<a[i+1]?(t=v,x=i):y=i>x&v>t?i:y),a[x]=a[y],a[y]=t,t=a.splice(++x).sort(),a.concat(t))
a.concat(a.splice(++x).sort())
iba a funcionar, de lo contrario lo habría intentado ...Jalea , 6 bytes
Recorre las permutaciones en orden lexicográfico descendente.
Pruébalo en línea!
Cómo funciona
fuente
C, 161 bytes
Algoritmo real de O (n).
Ejemplo de uso:
fuente
Python 2 , 154 bytes
Pruébalo en línea!
fuente
exec
me dio todo tipo de errores en una funciónJalea , 10 bytes
Pruébalo en línea!
Ordenar> toda permutación> buscar entrada> agregar 1> índice en "toda permutación
fuente
Œ¿‘œ?Ṣ
). No tenía ganas de robar desde, bueno, lo mismo.Q
cosita. Todavía puedes jugar golfṢŒ!Qµi³‘ị
.05AB1E , 7 bytes
Pruébalo en línea!
fuente
PHP , 117 bytes
Toma entrada / salida como lista de cadenas de letras inferiores
Pruébalo en línea!
fuente