Definimos una secuencia tipo Collatzs
con 4 enteros positivos:
n
valor iniciald > 1
divisorm > 1
multiplicadori
incremento
(En la secuencia original de Collatz d = 2
m = 3
y i = 1
.)
Dados estos enteros s
se crearán de la siguiente manera:
s(0) = n
- si
k > 0
ys(k-1) mod d = 0
luegos(k) = s(k-1) / d
- si
k > 0
ys(k-1) mod d != 0
luegos(k) = s(k-1) * m + i
Una secuencia de ejemplo con d = 2, m = 3, i = 5
y n = 80
será s = 80, 40, 20, 10, 5, 20, 10, 5, 20, ...
.
Cada secuencia alcanzará valores más altos que cualquier límite dado (es decir, la secuencia es divergente) o entrará en un bucle infinito si para algunos t
y u
( t!=u
) la s(t) = s(u)
igualdad será verdadera.
En nuestro problema, si el valor de un elemento de secuencia es mayor 10^9
o no hay repetición de elementos antes del 1000
elemento th, la secuencia se considera divergente.
La tarea
Debería escribir un programa o función que tome los enteros positivos d
m
y i
como entradas y salidas todos los diferentes tipos finales de las secuencias (bucles infinitos y divergencia) que n = 1, 2, 3, ... 999, 1000
pueden producir los valores iniciales .
Detalles de entrada
- La entrada es una cadena o una lista (o equivalente más cercano en su idioma) que representa (en la forma común) tres números enteros positivos
d
,m
yi
en ese orden.d
ym
son al menos2
. Ninguno de los dos números es mayor que100
.
Detalles de salida
La especificación de salida es un poco prolija. Podría valer la pena ver los ejemplos primero.
- Debe enviar a la salida estándar (o la alternativa más cercana) o devolver una cadena.
- Si es posible una secuencia divergente, la primera línea debería serlo
DIVERGENT
. - Una representación única del ciclo de una secuencia es su rotación, donde el número más pequeño es el último separado por espacios. Por ejemplo, si
s = 2 1 4 2 1 4 2 1
el bucle es4 2 1
. - En cada línea siguiente, debe generar cada ciclo único exactamente una vez precedido por la palabra
LOOP
. P.ejLOOP 4 2 1
- Los bucles deben estar en orden ascendente con respecto a su último elemento.
- La nueva línea final es opcional.
Ejemplos:
Las primeras líneas son las entradas y las siguientes hasta una línea en blanco son las salidas.
2 3 1
LOOP 4 2 1
2 2 6
LOOP 8 4 2 1
LOOP 12 6 3
3 7 8
DIVERGENT
LOOP 15 5 43 309 103 729 243 81 27 9 3 1
LOOP 22 162 54 18 6 2
LOOP 36 12 4
3 9 1
DIVERGENT
6 9 9
DIVERGENT
LOOP 18 3 36 6 1
LOOP 27 252 42 7 72 12 2
LOOP 45 414 69 630 105 954 159 1440 240 40 369 3330 555 5004 834 139 1260 210 35 324 54 9 90 15 144 24 4
LOOP 81 738 123 1116 186 31 288 48 8
LOOP 99 900 150 25 234 39 360 60 10
LOOP 126 21 198 33 306 51 468 78 13
10 10 10
LOOP 20 2 30 3 40 4 50 5 60 6 70 7 80 8 90 9 100 10 1
93 91 92
DIVERGENT
LOOP 2185 198927 2139 23
LOOP 4278 46
Implementación de referencia en Python 3 en Ideone.
Este es el código de golf, por lo que gana la entrada más corta.