--- id: 5ea2815a8640bcc6cb7dab3c title: Числа Лішрел challengeType: 5 forumTopicId: 385287 dashedName: lychrel-numbers --- # --description--
  1. Візьміть ціле число n₀, більше за 0.
  2. Утворіть наступне число n серій, повернувши n₀ і додавши його до n₀
  3. Зупиніться, коли n стає паліндромним, тобто цифри n у зворотньому порядку == n.
Наведене вище повторюване відношення при застосуванні до більшості початкових чисел `n` = 1, 2, ... обривається на паліндромі досить швидко. Наприклад, якщо `n₀` = 12, ми отримуємо: ```bash 12 12 + 21 = 33, a palindrome! ``` І якщо `n₀` = 55, то отримаємо: ```bash 55 55 + 55 = 110 110 + 011 = 121, a palindrome! ``` Зверніть увагу, що ця перевірка паліндрому відбувається *після* додавання. Деякі початкові числа можуть повторюватися безкінечну кількість разів, рекурентне співвідношення для 196 нараховує мільйони повторів, що утворює числа в мільйонному степені, так і не утворивши паліндром. Числа, які не можуть стати паліндромами, називають** числа Лішрел**. У цьому плані число Лішрел - це будь-яке початкове число, яке не утворює паліндром через 500 (і більше) ітерацій. **Початкові та пов'язані числа Лішрел:** Будь-яке ціле число у послідовності чисел Лішрел є також числом Лішрел. Загалом, будь яка послідовність з одного числа Лішрел *повинна *зійтися з послідовністю з попереднього потенційного числа Лішрел; наприклад, послідовності чисел 196, а пізніше 689 починаються з: ```bash 196 196 + 691 = 887 887 + 788 = 1675 1675 + 5761 = 7436 7436 + 6347 = 13783 13783 + 38731 = 52514 52514 + 41525 = 94039 ... 689 689 + 986 = 1675 1675 + 5761 = 7436 ... ``` Отож ми бачимо, що послідовність, яка починається з 689, збігається й продовжується тими ж числами, що й для 196. А отже в подальшому ми можемо розбити числа Лішрел на справжні **Початкові **потенційні числа Лішрел, а також **Відносні** числа, які не утворюють паліндром, проте містять цілі числа в послідовності, які розглядають як частину послідовності, що виникла від меншого числа Лішрел. # --instructions-- Напишіть функцію, яка бере число як параметр. Поверніть значення true, якщо це число є числом Лішрел. В іншому випадку поверніть false. Пам'ятайте, що кількість ітерацій не повинна перевищувати 500. # --hints-- `isLychrel` повинен бути функцією. ```js assert(typeof isLychrel === 'function'); ``` `isLychrel(12)` має повернути логічне значення. ```js assert(typeof isLychrel(12) === 'boolean'); ``` `isLychrel(12)` має повернути `false`. ```js assert.equal(isLychrel(12), false); ``` `isLychrel(55)` має повернути `false`. ```js assert.equal(isLychrel(55), false); ``` `isLychrel(196)` має повернути `true`. ```js assert.equal(isLychrel(196), true); ``` `isLychrel(879)` має повернути `true`. ```js assert.equal(isLychrel(879), true); ``` `isLychrel(44987)` має повернути `false`. ```js assert.equal(isLychrel(44987), false); ``` `isLychrel(7059)` має повернути `true`. ```js assert.equal(isLychrel(7059), true); ``` # --seed-- ## --seed-contents-- ```js function isLychrel(n) { } ``` # --solutions-- ```js function isLychrel(n) { function reverse(num) { return parseInt( num .toString() .split('') .reverse() .join('') ); } var i; for (i = 0; i < 500; i++) { n = n + reverse(n); if (n == reverse(n)) break; } return i == 500; } ```