--- id: 595608ff8bcd7a50bd490181 title: Numeri di Hailstone challengeType: 5 forumTopicId: 302279 dashedName: hailstone-sequence --- # --description-- I numeri di Hailstone possono essere generati da un numero intero positivo iniziale, `n` in questo modo: - Se `n` è `1` allora la sequenza termina - Se `n` è `pari` allora il successivo `n` della sequenza `= n/2` - Se `n` è `dispari` allora il successivo `n` della sequenza `= (3 * n) + 1` La congettura di Collatz (non dimostrata) è che i numeri di Hailstone per qualsiasi numero iniziale arrivano sempre a 1. I numeri di Hailstone (detti così perché i valori sono di solito soggetti a più discese e salite come la grandine in una nuvola), sono anche noti come sequenza di Collatz. # --instructions-- 1. Crea una routine per generare la sequenza di Collatz per un numero 2. La tua funzione dovrebbe restituire un array con il numero sotto `limit` che ha la più lunga sequenza di collatz e la lunghezza della sequenza. (Ma non mostrare la sequenza effettiva!) # --hints-- `hailstoneSequence` dovrebbe essere una funzione. ```js assert(typeof hailstoneSequence === 'function'); ``` `hailstoneSequence(30)` dovrebbe restituire un array. ```js assert(Array.isArray(hailstoneSequence(30))); ``` `hailstoneSequence(30)` dovrebbe restituire `[27, 112]`. ```js assert.deepEqual(hailstoneSequence(30), [27, 112]); ``` `hailstoneSequence(50000)` dovrebbe restituire `[35655, 324]`. ```js assert.deepEqual(hailstoneSequence(50000), [35655, 324]); ``` `hailstoneSequence(100000)` dovrebbe restituire `[77031, 351]`. ```js assert.deepEqual(hailstoneSequence(100000), [77031, 351]); ``` # --seed-- ## --seed-contents-- ```js function hailstoneSequence(limit) { const res = []; return res; } ``` # --solutions-- ```js function hailstoneSequence (limit) { function hailstone(n) { const seq = [n]; while (n > 1) { n = n % 2 ? 3 * n + 1 : n / 2; seq.push(n); } return seq; } let n = 0; let max = 0; for (let i = limit; --i;) { const seq = hailstone(i); const sLen = seq.length; if (sLen > max) { n = i; max = sLen; } } return [n, max]; } ```