La guía o código que hallarás en este artículo es la resolución más rápida y válida que hallamos a tu duda o dilema.
Solución:
pitón 3, 150 140 bytes
def f(n):
a=b=x=y=z=0
for i in range(n):
a=x-~xa
z*=a|b
return x,y,z
¡Pruébelo en línea!
Posee $O(n)$ complejidad. El pie de página de TIO imprime los primeros 720 valores en aproximadamente 0,5 segundos.
¡Gracias a @ElPedro y @PrincePolka por ahorrar 5 bytes cada uno!
Jalea, 31 bytes
5,1ṁ9ĖŒṙṚḊḊḊ$Ƭz0ZUṬ€€ỊŒṪ’ṙÞ1ị@‘
Un enlace monádico que acepta un número entero en ps[0,719]ps que produce una lista de tres enteros ps[X, Y, Z]ps.
¡Pruébelo en línea!
O vea el conjunto de pruebas (que se completa en alrededor de 12 a 20 segundos en TIO)
¿Cómo?
Construye una tabla de búsqueda e indexa en ella:
5,1ṁ9ĖŒṙṚḊḊḊ$Ƭz0ZUṬ€€ỊŒṪ’ṙÞ1ị@‘ - Link: integer, n
5,1 - pair literal = [5,1]
ṁ9 - mould like 9 = [5,1,5,1,5,1,5,1,5]
Ė - enumerate = [[1,5],[2,1],[3,5],[4,1],[5,5],[6,1],[7,5],[8,1],[9,5]]
Œṙ - run-length-decode = [1,1,1,1,1,2,3,...,7,7,7,7,7,8,9,9,9,9,9]
Ṛ - reverse = [9,9,9,9,9,8,7,7,7,7,7,...,3,2,1,1,1,1,1]
Ḋ - dequeue = [9,9,9,9,8,7,7,7,7,7,...,3,2,1,1,1,1,1]
Ƭ - collect until a fixed-point:
$ - last two links as a monad:
Ḋ - dequeue
Ḋ - dequeue
- } = [[9,9,9,9,8,7,7,7,7,7,...,3,2,1,1,1,1,1],[9,9,8,7,...],[8,7,...],...,[1,1],[]]
z0 - transpose with filler zero
Z - transpose
U - reverse each list
Ṭ€€ - un-truth each int (e.g. 5 -> [0,0,0,0,1])
Ị - insignificant? (abs(x)<=1) (e.g. [0,0,0,0,1]->[1,1,1,1,1])
ŒṪ - truthy multi-dimensional 1-indexed indices
’ - decrement (i.e. all the [X,Y,Z] values)
Þ - sort by:
ṙ 1 - the list value rotated left by one (i.e. by [Y,Z,X])
‘ - increment (n) (since Jelly is 1-indexed)
@ - with swapped arguments:
ị - index into
JavaScript, 93 85 bytes
Un puerto de la solución Python de Nick.
n=>(g=x=>n--?g(x>1n?++x:z
¡Pruébelo en línea!
Se guardaron 8 bytes gracias a la sugerencia de Arnauld de usar BigInts, además de un par de otros ajustes.
Te invitamos a añadir valor a nuestro contenido participando con tu experiencia en las aclaraciones.