3.6 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5ea2815a8640bcc6cb7dab3c | Números de Lychrel | 5 | 385287 | lychrel-numbers |
--description--
- Receba um número inteiro
n₀
, maior que zero. - Forme o próximo número
n
da série invertendon₀
e adicionando-a an₀
- Pare quando
n
se tornar palindrômico - ou seja, os dígitos den
na ordem inversa ==n
.
A relação de recorrência acima, quando aplicada à maioria dos números iniciais n
= 1, 2, ... termina rapidamente em um palíndromo.
Por exemplo, se n₀
= 12, temos we get:
12
12 + 21 = 33, a palindrome!
E se n₀
= 55, temos:
55
55 + 55 = 110
110 + 011 = 121, a palindrome!
Observe que a verificação de um palíndromo acontece após uma adição.
Alguns números iniciais parecem demorar para sempre. A relação de recorrência para 196 foi calculada por milhões e milhões de repetições formando números com milhões de dígitos, sem formar um palíndromo. Esses números que não terminam em um palíndromo são chamados de números de Lychrel.
Para fins desta tarefa, um número de Lychrel é qualquer número inicial que não forme um palíndromo em 500 (ou mais) iterações.
Seed e os números de Lychrel relacionados:
Qualquer inteiro produzido na sequência de um número de Lychrel também é um número de Lychrel.
Em geral, qualquer sequência a partir de um número de Lychrel pode convergir para se juntar à sequência de um candidato a número de Lychrel anterior. Por exemplo, as sequências para os números 196 e depois 689 começam:
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
...
Vemos, portanto, que a sequência que começa com 689 converge e continua com os mesmos números que para 196.
Por isso, podemos dividir ainda mais os números de Lychrel em verdadeiros seeds candidatas a números de Lychrel, e números relacionados que não produzem palíndromos, mas têm números inteiros em sua sequência que são vistos como parte da sequência gerada de um número de Lychrel inferior.
--instructions--
Escreva uma função que recebe um número como parâmetro. Retorne true se o número for um número de Lynchrel. Caso contrário, retorne false. Lembre-se de que o limite de iterações é de 500.
--hints--
isLychrel
deve ser uma função.
assert(typeof isLychrel === 'function');
isLychrel(12)
deve retornar um booleano.
assert(typeof isLychrel(12) === 'boolean');
isLychrel(12)
deve retornar false
.
assert.equal(isLychrel(12), false);
isLychrel(55)
deve retornar false
.
assert.equal(isLychrel(55), false);
isLychrel(196)
deve retornar true
.
assert.equal(isLychrel(196), true);
isLychrel(879)
deve retornar true
.
assert.equal(isLychrel(879), true);
isLychrel(44987)
deve retornar false
.
assert.equal(isLychrel(44987), false);
isLychrel(7059)
deve retornar 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;
}