Desafío
Dado un entero n ≥ 4 , genera una permutación de los enteros [0, n-1] con la propiedad de que no hay dos enteros consecutivos (enteros con diferencia absoluta 1) uno al lado del otro.
Ejemplos
- 4 → [1, 3, 0, 2]
- 5 → [0, 2, 4, 1, 3]
- 6 → [0, 2, 4, 1, 3, 5]
- 7 → [0, 2, 4, 1, 5, 3, 6]
En su lugar, puede usar la indexación 1 (usando enteros [1, n] en lugar de [0, n-1] ).
Su código debe ejecutarse en tiempo polinómico en n , por lo que no puede probar todas las permutaciones y probar cada una.
[[1,3],[0,2]]
Sería un formato de salida aceptable?Respuestas:
Jalea ,
32 bytesOrdena los enteros en [1, ..., n] por su LSB.
Pruébalo en línea!
fuente
Þ
ordenación estable, porque se implementa utilizando lasorted
función Python , que se garantiza que sea estable .Python 2 , 32 bytes
Pruébalo en línea!
fuente
Python 3 ,
40, 38 bytesPruébalo en línea!
Esto corre a
O(n)
tiempo.¡Gracias a Dennis por guardar 2 bytes!
fuente
Python 2 , 34 bytes
Pruébalo en línea!
Python 2 , 40 bytes
Pruébalo en línea!
fuente
Haskell, 22 bytes
f es una función de n que devuelve una lista ordenada adecuadamente. Estoy usando la opción de 1 indexación.
fuente
Octava , 17 bytes
Pruébalo en línea!
Esto utiliza el mismo enfoque que muchos otros. Concatene dos vectores, uno con todos los números pares en el rango inclusivo 2 ... x , y todos los números impares en el rango inclusivo 1 ... x . La sintaxis debería ser bastante obvia, por lo que no explicaré eso.
fuente
3
y2
uno al lado del otrof(4)
?JavaScript (ES6), 40 bytes
Editar: guardado 1 byte gracias a @Arnauld.
fuente
Gaia , 2 bytes
Pruébalo en línea!
Esto simplemente (estable) ∫ Ørts los números enteros en el intervalo [1, de entrada] por su pa r dad.
fuente
R ,
393635 bytesPruébalo en línea!
fuente
05AB1E , 3 bytes
Puerto de la respuesta de DJMcMayhem Python y Dennis's Jelly
Pruébalo en línea!
¿Cómo?
fuente
Japt, 4 bytes
También podrías reemplazar
u
conv
para obtener un orden diferente.Intentalo
O, si podemos superar una matriz de 2 matrices:
Intentalo
fuente
4
Desafortunadamente, ambos fallan ; se puede fijar el primero cambiandou
av
oo
aõ
.Mathematica, 50 -> 47 -> 42 bytes
Pruébalo en línea!
Gracias a user202729 por señalar el doble potencial de optimización Únase [] en lugar de Flatten [] y utilice funciones puras.
Me gustaría agregar dos comentarios.
1) Es bastante sencillo construir una permutación específica sin sucesión descendente o ascendente para n> = 4 como se solicita en el OP.
Consiste en dos listas consecutivas.
Para incluso n estos son:
list1 = (2,4, ..., n / 2)
list2 = (1,3, ..., n / 2-1)
Para n impar tenemos:
list1 = (2,4, ..., Floor [n / 2])
list2 = (1,3, ..., Floor [n / 2])
Para este "algoritmo" solo se debe tomar una decisión (n par o impar), el resto es simplemente escribir n números.
Se proporciona una posible solución de Mathematica en la parte superior.
2) Una pregunta relacionada es cuántas permutaciones existen en función de n.
Mathematica, 124 Bytes
Pruébalo en línea!
Ejemplo:
Contar el número de tales permutaciones es un problema estándar.
Para n = 4 hay 2: {{2,4,1,3}, {3,1,4,2}}
Para n = 5 hay 14: {{1,3,5,2,4}, {1,4,2,5,3}, {2,4,1,3,5}, {2,4, 1,5,3}, {2,5,3,1,4}, {3,1,4,2,5}, {3,1,5,2,4}, {3,5,1, 4,2}, {3,5,2,4,1}, {4,1,3,5,2}, {4,2,5,1,3}, {4,2,5,3, 1}, {5,2,4,1,3}, {5,3,1,4,2}}
El número a (n) de estas permutaciones aumenta rápidamente: 2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034, ...
Para n grande, la relación a (n) / n! parece acercarse al límite 1 / e ^ 2 = 0.135335 ... No tengo pruebas estrictas, pero es solo una conjetura de la evidencia numérica. Puede probar esto intentando ejecutar el programa en línea.
El programa anterior (basado en la referencia dada a continuación) calcula estos números.
Puede encontrar más información en la secuencia relevante en OEIS: A002464 . El problema de Hertzsprung: formas de organizar n reyes que no atacan en un tablero n X n, con 1 en cada fila y columna. También número de permutaciones de longitud n sin sucesiones ascendentes o descendentes.
fuente
[some text](the_link)
. En cuanto al enlace "Pruébelo en línea" en particular, el sitio web https://tio.run/ que está alojado por nuestro propio @Dennis contiene enlaces a todo tipo de lenguajes de programación. Wolfram Language (Mathematica) es uno de ellos. En la parte superior, puede hacer clic en el botón de reproducción para ejecutar el código, o en el botón de hipervínculo para copiar "Pruébelo en línea". (marcado-) enlaces. Y puede dividir su código en "Código" real (su envío), con un encabezado / pie de página opcional para (bastante) imprimir una o varias cajas de prueba.JavaScript (Node.js) , 42 bytes
Pruébalo en línea!
JavaScript (Node.js) , 47 bytes
Pruébalo en línea!
fuente
Rubí , 27 bytes
Pruébalo en línea!
Usando la indexación 1
fuente
Espacio en blanco , 161 bytes
Aquí está la presentación oficial, sin comentarios: ¡ Pruébelo en línea!
Pruébalo en línea!
Sacrifiqué unos pocos bytes para que el programa se ejecute sin errores, creo que podría perder alrededor de 7-8 bytes, y aún se generaría correctamente, pero también generaría mensajes de error, y nadie quiere eso.
Explicación completa de bytes:
fuente
push_0, read_STDIN_as_int, push_0, retrieve
puede serpush_0, duplicate_0, read_STDIN_as_int, retrieve
guardar un byte. Y la primera etiqueta puede ser vacía con enNSSN
lugar deNSSSN
(y luego la segunda etiqueta puede serNSSSN
; terceraNSSTN
y cuartaNSSSSN
). Esto también debería ahorrar 8 bytes. Además, puede eliminar el primeroJump_to_third_label
porque ya tiene elSet_third_label
derecho debajo. En total: 140 bytes ; (o con comentarios: Pruébelo en línea ). -3 bytes si elimina laNNN
salida.F # (Mono) , 27 bytes
Pruébalo en línea!
fuente
Gol> <> , 14 bytes
Pruébalo en línea!
Programa completo de ejemplo y cómo funciona
fuente
J , 10 bytes
Pruébalo en línea!
Explicación:
fuente
Java 8, 56 bytes
Puerto de la respuesta JavaScript de @Neil (ES6) .
Pruébalo en línea.
Antigua respuesta de 66 bytes:
Pruébalo en línea.
Explicación:
fuente
Rubí, 27 bytes
Como en esta respuesta , los
n
primeros enteros se ordenan por su bit menos significativo.Pruébalo en línea!
fuente