Introducción (puede ser ignorado)
Poner todos los números positivos en su orden regular (1, 2, 3, ...) es un poco aburrido, ¿no? Así que aquí hay una serie de desafíos en torno a las permutaciones (reorganizaciones) de todos los números positivos. Este es el cuarto desafío de esta serie (enlaces al primer , segundo y tercer desafío).
En este desafío, exploraremos no solo una permutación de los números naturales, ¡sino un mundo entero de permutaciones!
En 2000, Clark Kimberling planteó un problema en la 26ª edición de Crux Mathematicorum , una revista científica de matemáticas publicada por la Canadian Mathematical Society. El problema era:
¿Cada número entero positivo ocurre exactamente una vez en esta secuencia?
En 2004, Mateusz Kwasnicki proporcionó pruebas positivas en la misma revista y en 2008, publicó una prueba más formal y (en comparación con la pregunta original) una prueba más general. Formuló la secuencia con los parámetros y :
Él demostró que para cualquier tal que sea irracional, la secuencia es una permutación de los números naturales. Dado que hay un número infinito de valores y para los que esto es cierto, este es verdaderamente un mundo entero de permutaciones de los números naturales. Seguiremos con el original , y para estos parámetros, la secuencia se puede encontrar como A050000en la OEIS. Sus primeros 20 elementos son:
1, 3, 9, 4, 2, 6, 18, 54, 27, 13, 39, 19, 57, 28, 14, 7, 21, 10, 5, 15
Como se trata de un desafío de "secuencia pura", la tarea es generar para un dado como entrada, donde es A050000 .
Tarea
Dada una entrada entera , salida en formato entero, donde:
Nota: aquí se supone una indexación basada en 1; puede usar indexación basada en 0, entonces , etc. Mencione esto en su respuesta si elige usar esto.
Casos de prueba
Input | Output
---------------
1 | 1
5 | 2
20 | 15
50 | 165
78 | 207
123 | 94
1234 | 3537
3000 | 2245
9999 | 4065
29890 | 149853
Reglas
- La entrada y la salida son enteros (su programa al menos debe admitir entradas y salidas en el rango de 1 hasta 32767)
- La entrada no válida (0, flotantes, cadenas, valores negativos, etc.) puede generar salidas imprevistas, errores o un comportamiento (no) definido.
- Se aplican las reglas de E / S predeterminadas .
- Las lagunas predeterminadas están prohibidas.
- Este es el código de golf , por lo que las respuestas más cortas en bytes ganan
Respuestas:
Japt ,
1514 bytes1 indexado.
Intentalo
fuente
JavaScript (ES6),
55 5150 bytesGuardado 1 byte gracias a @EmbodimentofIgnorance
Guardado 1 byte gracias a @tsh
Pruébalo en línea!
fuente
n=>eval("for(o=[p=2];n--;)o[p=o[q=p>>1]?3*p:q]=p")
Jalea , 15 bytes
Un programa completo que acepta el número entero
n
(basado en 1) de STDIN que imprime el resultado.Pruébalo en línea!
¿Cómo?
fuente
05AB1E ,
1615 bytesGuardado 1 byte gracias a Kevin Cruijssen .
0 indexado.
Pruébalo en línea!
Explicación
Usando
n=1
como ejemplofuente
Perl 6 , 49 bytes
-2 bytes gracias a nwellnof
Pruébalo en línea!
Devuelve el elemento indexado 0 en la secuencia. Puede cambiar esto a 1 indexado cambiando los elementos iniciales a en
0,1
lugar de1,3
Explicación:
fuente
J ,
4740 bytesPruébalo en línea!
sin golf
Traducción directa de la definición a J. Se construye de abajo hacia arriba utilizando
^:
para iterar desde el valor inicial el número requerido de veces.fuente
Java 10,
12099 bytesPruébalo en línea.
Explicación:
fuente
Haskell ,
6765 bytesPruébalo en línea!
Utiliza indexación basada en 0.
EDITAR: guardado 2 bytes usando en
elem
lugar denotElem
y cambiando condicionesfuente
Jalea , 21 bytes
Pruébalo en línea!
Un enlace monádico que toma un índice ceronorte como argumento y vuelve a ( n ) .
fuente
Ruby ,
545248 bytesPruébalo en línea!
fuente
C ++ (gcc) ,
189180 bytes-9 bytes a pequeños campos de golf
Pruébalo en línea!
Calcula la secuencia hasta
n
, luego devuelve el elemento deseado. Lento para índices más grandes.fuente
Python 2 , 66 bytes
Pruébalo en línea!
Utiliza indexación basada en cero. El lambda hace poco más que construir recursivamente la secuencia y regresar tan pronto como se alcanza el índice requerido.
fuente
Stax , 14 bytes
Ejecutar y depurarlo
Indexado a cero.
fuente
Wolfram Language (Mathematica) , 63 bytes
Pruébalo en línea!
Esto está indexado a 0
(en TIO agregué -1 en cada caso de prueba)
fuente
Python 2 , 62 bytes
Pruébalo en línea!
Devoluciones
True
paraa(0)
. 0 indexado.fuente
Python 3 ,
1051031009583 bytes-2 bytes gracias a agtoever
-12 bytes gracias a ArBo
Pruébalo en línea!
fuente
while len(s)<=n
y reemplazar las i con-1
. Esto debería eliminar uno de los dos caracteres.if
delwhile
bucle para permitir una línea de ese bucleGaia ,
2220 bytesPruébalo en línea!
Índice basado en 0.
Gracias a Shaggy por el enfoque.
;D
fuente
Haskell , 55 bytes
Pruébalo en línea!
Método de generación de listas ingeniosas del usuario de golf 1472751 .
Mismo largo:
Pruébalo en línea!
fuente
Lua , 78 bytes
Pruébalo en línea!
fuente
z
variable y cambiando la instrucción if a ternary