Este desafío de código hará que calcules la cantidad de formas de llegar a partir de usando mapas de la forma (con j un número entero no negativo), y hacerlo en el número mínimo de pasos.
(Tenga en cuenta que esto está relacionado con la secuencia OEIS A307092 ).
Ejemplo
Entonces, por ejemplo, porque se requieren tres mapas, y hay dos secuencias distintas de tres mapas que enviarán de a :
Resultando en o .
Valores de ejemplo
f(2) = 1 (via [])
f(3) = 1 (via [0])
f(4) = 1 (via [1])
f(5) = 1 (via [1,0])
f(12) = 2 (via [0,2] or [2,1])
f(13) = 2 (via [0,2,0] or [2,1,0], shown above)
f(19) = 1 (via [4,0])
f(20) = 2 (via [1,2] or [3,1])
f(226) = 3 (via [2,0,2,1,0,1], [3,2,0,0,0,1], or [2,3,0,0,0,0])
f(372) = 4 (via [3,0,1,0,1,1,0,1,1], [1,1,0,2,0,0,0,1,1], [0,2,0,2,0,0,0,0,1], or [2,1,0,2,0,0,0,0,1])
Reto
El desafío es producir un programa que tome un número entero como entrada y genere el número de rutas distintas de a mediante un número mínimo de mapas de la forma .
Este es el código de golf , por lo que gana menos bytes.
code-golf
sequence
combinatorics
Peter Kagey
fuente
fuente
^
símbolo denota exponenciación. También podría ser XOR (por ejemplo, C utiliza^
para XOR bit a bit).x -> x + x^j
Respuestas:
Jalea , 16 bytes
Pruébalo en línea!
Un programa completo que toma como argumento y devuelve el número de formas de llegar a usando la longitud mínima de la ruta. Ineficiente para grandes .norte norte norte
fuente
JavaScript (ES6),
111 ... 8480 bytesDevuelve verdadero en lugar de para .1 n = 2
Pruébalo en línea!
Comentado
fuente
Haskell ,
7875 bytesEsta implementación utiliza una búsqueda de aliento primero en el "árbol" de forma iterativa todas las asignaciones necesarias
x -> x + x^j
.Pruébalo en línea!
Explicación
fuente
05AB1E , 17 bytes
Pruébalo en línea!
fuente
Python 2 , 72 bytes
Pruébalo en línea!
fuente
Perl 5 (
-lp
), 79 bytesTIO
fuente
CJam (27 bytes)
Demostración en línea
Advertencia: esto consume mucha memoria muy rápido.
Disección:
La bonificación
2
s (para manejar el caso especial de entrada2
, porque loswhile
bucles son más caros que losdo-while
bucles) significa que el tamaño de la lista crece muy rápido, y el uso de exponentes hastan-1
significa que los valores de los números más grandes en la lista crecen muy rapido.fuente
Haskell , 65 bytes
Pruébalo en línea!
La búsqueda del golf es lo primero en amplitud . También intenté retroceder
n
, pero fue más largo:73 bytes
Pruébalo en línea!
fuente
R ,
7877 bytesPruébalo en línea!
Uso de una búsqueda simplificada de Breadth-first
Código desenrollado con explicación:
Versión más corta con gran asignación de memoria (falla para casos más grandes):
R ,
7069 bytesPruébalo en línea!
-1 byte gracias a @RobinRyder
fuente
!(a<-sum(x==n))
podría ser!{a=sum(x==n)}
de -1 byte en ambos casos.Pyth , 24 bytes
Pruébalo en línea!
Esto debería producir la salida correcta, pero es muy lenta (el caso de prueba 372 agota el tiempo de espera en TIO). Podría hacerlo más corto reemplazando
.lQ2
conQ
, pero esto haría que el tiempo de ejecución sea horrible.Explicación
fuente