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

3.6 KiB

id title challengeType forumTopicId dashedName
5ea2815a8640bcc6cb7dab3c Números de Lychrel 5 385287 lychrel-numbers

--description--

  1. Receba um número inteiro n₀, maior que zero.
  2. Forme o próximo número n da série invertendo n₀ e adicionando-a a n₀
  3. Pare quando n se tornar palindrômico - ou seja, os dígitos de n 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;
}