Definiamo una sequenza simile a Collatzs con 4 numeri interi positivi:
nvalore inizialed > 1divisorem > 1moltiplicatoreiincremento
(Nella sequenza originale di Collatz d = 2 m = 3e i = 1.)
Dati questi numeri interi sverranno creati nel modo seguente:
s(0) = n- se
k > 0es(k-1) mod d = 0pois(k) = s(k-1) / d - se
k > 0es(k-1) mod d != 0pois(k) = s(k-1) * m + i
Una sequenza di esempio con d = 2, m = 3, i = 5e n = 80sarà s = 80, 40, 20, 10, 5, 20, 10, 5, 20, ....
Ogni sequenza raggiungerà valori più alti di qualsiasi dato limite (ovvero la sequenza è divergente) o entrerà in un ciclo infinito se per alcuni te u( t!=u) l' s(t) = s(u)uguaglianza sarà vera.
Nel nostro problema se il valore di un elemento sequenza è maggiore di 10^9o non c'è ripetizione di elemento prima di1000 dell'elemento th, la sequenza è considerata divergente.
L'obiettivo
Dovresti scrivere un programma o una funzione che accetta gli interi positivi d me icome input e output tutti i diversi tipi finali delle sequenze (loop infiniti e divergenza) quali i valori inizialin = 1, 2, 3, ... 999, 1000 possono produrre.
Dettagli di input
- L'input è una stringa o un elenco (o l'equivalente più vicino nella tua lingua) che rappresenta (nel modo comune) tre numeri interi positivi
d,meiin quell'ordine.de lomsono almeno2. Nessuno dei due numeri è maggiore di100.
Dettagli di output
La specifica di output è un po 'prolissa. Vale la pena dare un'occhiata agli esempi prima.
- Dovresti produrre l'output standard (o l'alternativa più vicina) o restituire una stringa.
- Se è possibile una sequenza divergente, la prima riga dovrebbe essere
DIVERGENT. - Una rappresentazione univoca del ciclo di una sequenza è la rotazione in cui il numero più piccolo è l'ultimo separato da spazi. Ad esempio, se
s = 2 1 4 2 1 4 2 1il ciclo è4 2 1. - In ogni riga successiva dovresti generare ogni ciclo univoco esattamente una volta preceduto dalla parola
LOOP. Per esempioLOOP 4 2 1 - I loop dovrebbero essere in ordine crescente rispetto al loro ultimo elemento.
- Il trascinamento di newline è facoltativo.
Esempi:
Le prime righe sono gli input e le seguenti fino a quando una riga vuota sono gli output.
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
Implementazione di riferimento in Python 3 su Ideone.
Questo è il golf da codice, quindi vince l'ingresso più breve.