--- title: Hailstone sequence id: 595608ff8bcd7a50bd490181 challengeType: 5 forumTopicId: 302279 localeTitle: Последовательность градиента --- ## Description

Последовательность чисел Hailstone может быть сгенерирована из начального положительного целого числа, n:

Если n равно 1, последовательность заканчивается. Если n четно, то следующее n последовательности = n/2 Если n нечетно, то следующее n последовательности = (3 * n) + 1

(Неподтвержденная) гипотеза Collatz заключается в том, что последовательность градиентов для любого начального числа всегда заканчивается.

Последовательность градиента также известна как номера градиента (поскольку значения обычно подвержены нескольким спуску и восхождениям, таким как град в облаке) или как последовательность Collatz.

Задача: создать процедуру для генерации последовательности градиента для числа. Используйте процедуру, чтобы показать, что последовательность градиента для числа 27 содержит 112 элементов, начиная с 27, 82, 41, 124 и заканчивая 8, 4, 2, 1 Покажите число менее 100 000, которое имеет самую длинную последовательность градиента вместе с этим длина последовательности. (Но не показывайте действительную последовательность!) См. Также: xkcd (humourous).
## Instructions
  1. Create a routine to generate the hailstone sequence for a number
  2. Use the routine to show that the hailstone sequence for the number 27 has 112 elements starting with 27, 82, 41, 124 and ending with 8, 4, 2, 1
  3. Show the number less than 100,000 which has the longest hailstone sequence together with that sequence's length. (But don't show the actual sequence!)
See also:
## Tests
```yml tests: - text: hailstoneSequence is a function. testString: assert(typeof hailstoneSequence === 'function'); - text: hailstoneSequence() should return [[27,82,41,124,8,4,2,1], [351, 77031]] testString: assert.deepEqual(hailstoneSequence(), res); ```
## Challenge Seed
```js // noprotect function hailstoneSequence() { const res = []; // Good luck! return res; } ```
### After Tests
```js const res = [[27, 82, 41, 124, 8, 4, 2, 1], [351, 77031]]; ```
## Solution
```js // noprotect function hailstoneSequence () { const res = []; function hailstone(n) { const seq = [n]; while (n > 1) { n = n % 2 ? 3 * n + 1 : n / 2; seq.push(n); } return seq; } const h = hailstone(27); const hLen = h.length; res.push([...h.slice(0, 4), ...h.slice(hLen - 4, hLen)]); let n = 0; let max = 0; for (let i = 100000; --i;) { const seq = hailstone(i); const sLen = seq.length; if (sLen > max) { n = i; max = sLen; } } res.push([max, n]); return res; } ```