Nous définissons une séquence de type Collatzs
avec 4 entiers positifs:
n
valeur de départd > 1
diviseurm > 1
multiplicateuri
incrément
(Dans la séquence originale de Collatz d = 2
m = 3
eti = 1
.)
Étant donné ces entiers s
seront créés de la manière suivante:
s(0) = n
- si
k > 0
ets(k-1) mod d = 0
alorss(k) = s(k-1) / d
- si
k > 0
ets(k-1) mod d != 0
alorss(k) = s(k-1) * m + i
Un exemple de séquence avec d = 2, m = 3, i = 5
et n = 80
seras = 80, 40, 20, 10, 5, 20, 10, 5, 20, ...
.
Chaque séquence atteindra des valeurs plus élevées que toute limite donnée (c'est-à-dire que la séquence est divergente) ou entrera dans une boucle infinie si pour certains t
et u
( t!=u
) l' s(t) = s(u)
égalité sera vraie.
Dans notre problème si la valeur d'un élément de séquence est supérieure à 10^9
ou s'il n'y a pas de répétition d'élément avant le 1000
e élément, la séquence est considérée comme divergente.
La tâche
Vous devez écrire un programme ou une fonction qui prend les entiers positifs d
m
et i
comme entrées et sorties tous les différents types de fin des séquences (boucles infinies et divergence) dont les valeurs de départn = 1, 2, 3, ... 999, 1000
peuvent produire.
Détails d'entrée
- L'entrée est une chaîne ou une liste (ou son équivalent le plus proche dans votre langue) représentant (de la manière habituelle) trois entiers positifs
d
,m
eti
dans cet ordre.d
etm
sont au moins2
. Aucun de ces nombres n'est supérieur à100
.
Détails de sortie
La spécification de sortie est un peu verbeuse. Cela pourrait valoir la peine de consulter les exemples en premier.
- Vous devez sortir vers la sortie standard (ou l'alternative la plus proche) ou renvoyer une chaîne.
- Si une séquence divergente est possible, la première ligne doit l'être
DIVERGENT
. - Une représentation unique de la boucle d'une séquence est sa rotation où le plus petit nombre est le dernier séparé par des espaces. Par exemple, si
s = 2 1 4 2 1 4 2 1
la boucle est4 2 1
. - Dans chaque ligne suivante, vous devez sortir chaque boucle unique exactement une fois précédée du mot
LOOP
. Par exempleLOOP 4 2 1
- Les boucles doivent être en ordre croissant par rapport à leur dernier élément.
- Le retour à la ligne est facultatif.
Exemples:
Les premières lignes sont les entrées et les suivantes jusqu'à ce qu'une ligne vierge soit les sorties.
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
Implémentation de référence en Python 3 sur Ideone.
C'est le golf de code, donc l'entrée la plus courte l'emporte.