freeCodeCamp/curriculum/challenges/ukrainian/10-coding-interview-prep/rosetta-code/lychrel-numbers.md

4.9 KiB
Raw Blame History

id title challengeType forumTopicId dashedName
5ea2815a8640bcc6cb7dab3c Числа Лішрел 1 385287 lychrel-numbers

--description--

  1. Візьміть ціле число n₀, більше за 0.
  2. Утворіть наступне число n серій, повернувши n₀ і додавши його до n₀
  3. Зупиніться, коли n стає паліндромним, тобто цифри n у зворотньому порядку == n.

Наведене вище повторюване відношення при застосуванні до більшості початкових чисел n = 1, 2, ... обривається на паліндромі досить швидко.

Наприклад, якщо n₀ = 12, ми отримуємо:

12
12 + 21 = 33,  a palindrome!

І якщо n₀ = 55, то отримаємо:

55
55 + 55 = 110
110 + 011 = 121,  a palindrome!

Зверніть увагу, що ця перевірка паліндрому відбувається після додавання.

Деякі початкові числа можуть повторюватися безкінечну кількість разів, рекурентне співвідношення для 196 нараховує мільйони повторів, що утворює числа в мільйонному степені, так і не утворивши паліндром. Числа, які не можуть стати паліндромами, називають** числа Лішрел**.

У цьому плані число Лішрел - це будь-яке початкове число, яке не утворює паліндром через 500 (і більше) ітерацій.

Початкові та пов'язані числа Лішрел:

Будь-яке ціле число у послідовності чисел Лішрел є також числом Лішрел.

Загалом, будь яка послідовність з одного числа Лішрел *повинна *зійтися з послідовністю з попереднього потенційного числа Лішрел; наприклад, послідовності чисел 196, а пізніше 689 починаються з:

    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 повинен бути функцією.

assert(typeof isLychrel === 'function');

isLychrel(12) має повернути логічне значення.

assert(typeof isLychrel(12) === 'boolean');

isLychrel(12) має повернути false.

assert.equal(isLychrel(12), false);

isLychrel(55) має повернути false.

assert.equal(isLychrel(55), false);

isLychrel(196) має повернути true.

assert.equal(isLychrel(196), true);

isLychrel(879) має повернути true.

assert.equal(isLychrel(879), true);

isLychrel(44987) має повернути false.

assert.equal(isLychrel(44987), false);

isLychrel(7059) має повернути true.

assert.equal(isLychrel(7059), true);

--seed--

--seed-contents--

function isLychrel(n) {

}

--solutions--

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;
}