2021-06-15 00:49:18 -07:00
---
id: 5ea2815a8640bcc6cb7dab3c
2022-02-19 12:56:08 +05:30
title: Numeri di Lychrel
2021-06-15 00:49:18 -07:00
challengeType: 5
forumTopicId: 385287
dashedName: lychrel-numbers
---
# --description--
< ol >
2022-02-19 12:56:08 +05:30
< li > Prendi un numero intero < code > n₀< / code > maggiore di zero.< / li >
< li > Forma il prossimo numero < code > n< / code > della serie invertendo < code > n₀< / code > e aggiungendolo a < code > n₀< / code > < / li >
< li > Termina quando < code > n< / code > diventa palindromo - cioè le cifre di < code > n< / code > in ordine inverso == < code > n< / code > .< / li >
2021-06-15 00:49:18 -07:00
< / ol >
2022-02-19 12:56:08 +05:30
La relazione di ricorrenza sopra riportata quando applicata alla maggior parte dei numeri iniziali `n` = 1, 2, ... termina in un palindromo abbastanza rapidamente.
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
Per esempio se `n₀` = 12 otteniamo:
2021-06-15 00:49:18 -07:00
```bash
12
12 + 21 = 33, a palindrome!
```
2022-02-19 12:56:08 +05:30
E se `n₀` = 55 otteniamo:
2021-06-15 00:49:18 -07:00
```bash
55
55 + 55 = 110
110 + 011 = 121, a palindrome!
```
2022-02-19 12:56:08 +05:30
Nota che il controllo per un palindromo viene fatto *dopo* una somma.
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
Alcuni numeri iniziali sembrano andare avanti per sempre; la relazione di ricorrenza per 196 è stata calcolata per milioni di ripetizioni formando numeri con milioni di cifre, senza formare un palindromo. Questi numeri che non terminano in un palindromo sono chiamati **numeri di Lychrel** .
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
Ai fini di questo compito un numero di Lychrel è qualsiasi numero iniziale che non forma un palindromo entro 500 (o più) iterazioni.
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
**Seme e numeri di Lychrel correlati:**
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
Qualsiasi numero intero prodotto nella sequenza di un numero di Lychrel è anche un numero di Lychrel.
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
In generale, qualsiasi sequenza da un numero di Lychrel *potrebbe* convergere alla sequenza formata da un precedente numero di Lychrel; per esempio le sequenze per i numeri 196 e poi 689 iniziano:
2021-06-15 00:49:18 -07:00
```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
...
```
2022-02-19 12:56:08 +05:30
Quindi vediamo che la sequenza a partire da 689 converge e continua con gli stessi numeri di quella del 196.
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
A causa di questo possiamo ulteriormente dividere i numeri di Lychrel in veri **Seed** di numeri di Lychrel, e numeri **Correlati** che non producono palindromi ma hanno interi nella loro sequenza visti come parte della sequenza generata da un numero di Lychrel inferiore.
2021-06-15 00:49:18 -07:00
# --instructions--
2022-02-19 12:56:08 +05:30
Scrivi una funzione che prende un numero come parametro. Restituisce vero se il numero è un numero di Lychrel. Altrimenti, restituisci falso. Ricorda che il limite di iterazioni è 500.
2021-06-15 00:49:18 -07:00
# --hints--
2022-02-19 12:56:08 +05:30
`isLychrel` dovrebbe essere una funzione.
2021-06-15 00:49:18 -07:00
```js
assert(typeof isLychrel === 'function');
```
2022-02-19 12:56:08 +05:30
`isLychrel(12)` dovrebbe restituire un booleano.
2021-06-15 00:49:18 -07:00
```js
assert(typeof isLychrel(12) === 'boolean');
```
2022-02-19 12:56:08 +05:30
`isLychrel(12)` dovrebbe restituire `false` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(isLychrel(12), false);
```
2022-02-19 12:56:08 +05:30
`isLychrel(55)` dovrebbe restituire `false` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(isLychrel(55), false);
```
2022-02-19 12:56:08 +05:30
`isLychrel(196)` dovrebbe restituire `true` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(isLychrel(196), true);
```
2022-02-19 12:56:08 +05:30
`isLychrel(879)` dovrebbe restituire `true` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(isLychrel(879), true);
```
2022-02-19 12:56:08 +05:30
`isLychrel(44987)` dovrebbe restituire `false` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(isLychrel(44987), false);
```
2022-02-19 12:56:08 +05:30
`isLychrel(7059)` dovrebbe restituire `true` .
2021-06-15 00:49:18 -07:00
```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;
}
```