Files

152 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 5ea2815a8640bcc6cb7dab3c
title: Числа Лішрел
challengeType: 5
forumTopicId: 385287
dashedName: lychrel-numbers
---
# --description--
<ol>
<li>Візьміть ціле число <code>n₀</code>, більше за 0.</li>
<li>Утворіть наступне число <code>n</code> серій, повернувши <code>n₀</code> і додавши його до <code>n₀</code></li>
<li>Зупиніться, коли <code>n</code> стає паліндромним, тобто цифри <code>n</code> у зворотньому порядку == <code>n</code>.</li>
</ol>
Наведене вище повторюване відношення при застосуванні до більшості початкових чисел `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;
}
```