Dado un número entero positivo, genera todos los trastornos de objetos.
Detalles
- Un trastorno es una permutación sin punto fijo. (Esto significa, en todos los números de desarreglo no pueden estar en el entrada-ésimo).
- La salida debe consistir en alteraciones de los números (o alternativamente ).
- Alternativamente, siempre puede imprimir alteraciones de (o respectivamente) pero debe especificarlo.
- La salida tiene que ser determinista, es decir, cada vez que se llama al programa con alguna dada como entrada, la salida debe ser la misma (lo que incluye que el orden de los trastornos debe permanecer igual), y la salida completa debe hacerse dentro de una cantidad de tiempo finita cada vez (no es suficiente hacerlo con probabilidad 1).
- Puede suponer que
- Para algunos dados , puede generar todos los trastornos o, alternativamente, puede tomar otro número entero que sirva como índice e imprimir el -ésimo trastorno (en el orden que elija).
Ejemplos
Tenga en cuenta que el orden de los trastornos no tiene que ser el mismo que se enumera aquí:
n=2: (2,1)
n=3: (2,3,1),(3,1,2)
n=4: (2,1,4,3),(2,3,4,1),(2,4,1,3), (3,1,4,2),(3,4,1,2),(3,4,2,1), (4,1,2,3),(4,3,1,2),(4,3,2,1)
OEIS A000166 cuenta el número de trastornos.
Respuestas:
Jalea , 6 bytes
Un enlace monádico que acepta un entero positivo que produce una lista de listas de enteros.
Pruébalo en línea!
¿Cómo?
fuente
Brachylog , 9 bytes
Pruébalo en línea!
Este es un generador que genera un trastorno de
[0, …, n-1]
dadon
.Si lo
ᶠ - findall
envolvemos en un metapredicado, obtenemos todas las generaciones posibles de trastornos por el generador.Explicación
fuente
JavaScript (V8) , 85 bytes
Una función recursiva que imprime todas las alteraciones basadas en 0.
Pruébalo en línea!
Comentado
fuente
Ruby , 55 bytes
Pruébalo en línea!
Genera todos los trastornos basados en 0
fuente
05AB1E , 9 bytes
Pruébalo en línea!
Explicación
fuente
Wolfram Language (Mathematica) , 55 bytes
Pruébalo en línea!
fuente
Japt , 8 bytes
Basado en 0
Pruébelo (el pie de página incrementa todos los elementos para facilitar la comparación con los casos de prueba)
fuente
Python 2 , 102 bytes
Pruébalo en línea!
Indización basada en 0, lista de tuplas.
itertools
Solución no basada:Python 2 , 107 bytes
Pruébalo en línea!
Indización basada en 0, líneas de listas, programa completo.
Nota: Esta solución, a pesar de que no importa la
itertools
biblioteca, no es mucho más larga que la otra que sí la importa, porque la mayor parte del volumen aquí está construyendo las permutaciones. ¡La verificación de desorden es realmente de unos 7 bytes adicionales! La razón es que la verificación se realiza sobre la marcha como parte de la construcción de cada permutación. Esto no es cierto para la otra solución, donde debe verificar si cada permutación devuelta por laitertools.permutations
función es de hecho un trastorno, y, por supuesto, la asignación en sí misma toma muchos bytes.fuente
MATL , 11 bytes
Esto genera todos los trastornos en orden lexicográfico.
Pruébalo en línea!
Explicación con ejemplo
Considere la entrada
3
.fuente
Perl 5
-MList::Util=none -n
,10089 bytesPruébalo en línea!
fuente
Haskell , 58 bytes
Pruébalo en línea!
60 bytes
Pruébalo en línea!
fuente
Gaia , 10 bytes
Pruébalo en línea!
fuente
J 26 bytes
Pruébalo en línea!
fuente
R ,
8180 bytesPruébalo en línea!
list
n
[1..n]
n
1:n%in%x
1:n-x
R + gtools , 62 bytes
Pruébalo en línea!
Mucho más eficiente, devuelve un
matrix
donde cada fila es un trastorno.fuente
Python 3.8 (prelanzamiento) , 96 bytes
Pruébalo en línea!
fuente
C ++ (gcc) ,
207196 bytes-5 bytes por ceilingcat -6 bytes por Roman Odaisky
Pruébalo en línea!
fuente
std::copy
le confían a la persona que llama el espacio adecuado para la salida.C ++ (gcc) , 133 bytes
Creo que esto ha crecido lo suficientemente diferente de la otra presentación como para merecer una respuesta por separado. ¡Finalmente un uso para
index[array]
la sintaxis de adentro hacia afuera!Pruébalo en línea!
fuente
Haskell, 76 bytes
fuente
Python 2 , 82 bytes
Pruébalo en línea!
88 bytes como programa:
Pruébalo en línea!
93 bytes usando itertools:
Pruébalo en línea!
fuente
Perl 6 ,
4937 bytesEditar: después de un poco de ida y vuelta con Phil H, lo hemos reducido a solo 37 bytes:
Pruébalo en línea!
Al usar el
Whatever
al principio, podemos evitar los corchetes (ahorra 2 caracteres). A continuación, utilice unZ
metaoperador con el-
que toma cada elemento de una permutación (por ejemplo, 2,3,1) y resta 0,1,2 en orden. Si alguno de ellos es 0 (falso), la unión completa falla.La solución original era (¡ Pruébelo en línea! )
fuente
Carbón ,
4428 bytestachado 44 sigue siendo regular 44
Pruébalo en línea! El enlace es a la versión detallada del código. Basada en la respuesta no itertools de @ EricTheOutgolfer. Explicación:
fuente
C (gcc) ,
187180 bytesPruébalo en línea!
fuente
Pyth , 12 bytes
Pruébalo en línea!
El filtro funciona así: si algún elemento está en su lugar original, (element-index) será 0 y todo el producto será 0, y por lo tanto falsey.
fuente