Nota: Este es un intento de reciclar las preguntas de permutación de guest271314
Hay un patrón interesante que se forma cuando encuentras las diferencias entre permutaciones ordenadas lexográficamente de números de base 10 con dígitos únicos ascendentes. Por ejemplo, 123
tiene permutaciones:
123 132 213 231 312 321
Cuando encuentras las diferencias entre estos, obtienes la secuencia
9 81 18 81 9
Todos los cuales son divisibles por nueve (debido a la suma de dígitos de los números de base 10), además de ser palindrómicos.
Notablemente, si usamos el siguiente número arriba 1234
, obtenemos la secuencia
9 81 18 81 9 702 9 171 27 72 18 693 18 72 27 171 9 702 9 81 18 81 9
10
0 to 9
Su objetivo es implementar esta secuencia, devolviendo cada elemento como un múltiplo de nueve. Por ejemplo, los primeros 23 elementos de esta secuencia son:
1 9 2 9 1 78 1 19 3 8 2 77 2 8 3 19 1 78 1 9 2 9 1
Algunos otros casos de prueba (0 indexados):
23 => 657
119 => 5336
719 => 41015
5039 => 286694
40319 => 1632373
362879 => 3978052
100 => 1
1000 => 4
10000 => 3
100000 => 3
Reglas:
- La presentación puede ser cualquiera de:
- Un programa / función que toma un número y devuelve el número en ese índice, ya sea 0 o 1 indexado.
- Un programa / función que genera / devuelve la secuencia infinitamente.
- Este es el código de golf , por lo que gana la implementación más corta para cada idioma.
Notas:
- Esta es OEIS A217626
- Estoy ofreciendo una recompensa de 500 por una solución que resuelve los elementos directamente sin calcular las permutaciones reales.
fuente
3628799 => -83676269
Respuestas:
Jalea , 9 bytes
Pruébalo en línea! (imprime el enésimo elemento)
Pruébalo en línea! (20 primeros elementos)
Explicación:
(Jelly tiene la función integrada
œ?
que calcula lan
permutación de una lista en un tiempo aproximadamente lineal. Bastante útil).fuente
Carbón , 71 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Obtenga una lista que contenga la entrada y una más que la entrada.
Repita hasta que ambos valores sean cero.
Realice la conversión factorial de base en ambos valores. ¡Es la primera vez que lo uso
≧
en una lista!Borrar el resultado.
Recorre cada número base factorial.
Haga una lista de los dígitos de 0 a longitud - 1.
Inicialice el resultado en una lista vacía.
Recorre los dígitos del número base factorial.
Agregue el siguiente dígito de permutación al resultado.
Eliminar ese dígito de la lista.
Convierta la permutación como un número base 10 y reste el resultado hasta ahora.
Divide el resultado final entre 9 y ponlo a cuerda.
fuente
Perl 6 , 82 bytes
-2 bytes gracias a Jo King
Pruébalo en línea!
0 indexado. No enumera todas las permutaciones. Teóricamente debería funcionar para todos n, pero rescata para n> 65536 con "Demasiados argumentos en la matriz de aplanamiento".
La siguiente versión de 80 bytes funciona para n hasta 98! -2 y es mucho más rápida:
Pruébalo en línea!
La siguiente versión de 53 bytes debería funcionar teóricamente para todos n, pero rescata para n> = 20 con "negarse a permutar más de 20 elementos".
Pruébalo en línea!
fuente
JavaScript (Node.js) , 134 bytes
Pruébalo en línea!
1 indexado.
La opinión de @ guest271314 es correcta. El cálculo de permutación directa es más corto ...
Explicación
Solución original (159 bytes)
Pruébalo en línea!
El enlace es a una versión más larga hecha para el rendimiento.
Array(n+1)
se haceArray(Math.min(n+1,15))
para que la demostración funcione. Teóricamente funciona hasta el infinito (hasta el límite de pila en la práctica).Explicación
Quiero decir que hay mucho que explicar.
fuente
n
, esta solución stackoverflow.com/a/34238979 proporciona un medio para obtener dos permutaciones adyacentes, o representaciones numéricas de permutaciones directamente por índice, que cuando se juega golf, debería reducir el código necesario para producir la salida(f(n) - f(n-1))/9
para este tipo de respuesta seleccionado de acuerdo con la regla "Un programa / función que toma un número y devuelve el número en ese índice, ya sea 0 o 1 indexado". .Pyth,
1514 bytesDevuelve el enésimo término. Probarlo aquí .
fuente
J ,
44, 41 bytesPruébalo en línea!
Nota: ¡funciona incluso para 10! caso de prueba, pero pierde algo de precisión allí ...
explicación original
fuente
JavaScript (ES6), 112 bytes
Muy similar al algoritmo de Shieru Asakoto .
Pruébalo en línea!
fuente