Files
freeCodeCamp/curriculum/challenges/spanish/08-coding-interview-prep/rosetta-code/hailstone-sequence.spanish.md

2.9 KiB

title, id, localeTitle, challengeType
title id localeTitle challengeType
Hailstone sequence 595608ff8bcd7a50bd490181 595608ff8bcd7a50bd490181 5

Description

La secuencia de números de Hailstone se puede generar a partir de un entero positivo inicial, n mediante:

Si n es 1, la secuencia termina. Si n es par, entonces el siguiente n de la secuencia = n/2 Si n es impar, entonces el siguiente n de la secuencia = (3 * n) + 1

La conjetura (no probada) de Collatz es que la secuencia de granizo para cualquier número inicial siempre termina.

La secuencia de granizo también se conoce como números de granizo (porque los valores suelen estar sujetos a múltiples descensos y ascensos como granizos en una nube), o como la secuencia de Collatz.

Tarea: Crea una rutina para generar la secuencia de granizo para un número. Use la rutina para mostrar que la secuencia de granizo para el número 27 tiene 112 elementos que comienzan con 27, 82, 41, 124 y que terminan con 8, 4, 2, 1 Muestre el número menos de 100,000 que tiene la secuencia de granizo más larga en conjunto con la longitud de esa secuencia. (¡Pero no muestres la secuencia real!) Ver también: xkcd (humorístico).

Instructions

Tests

tests:
  - text: <code>hailstoneSequence</code> es una función.
    testString: 'assert(typeof hailstoneSequence === "function", "<code>hailstoneSequence</code> is a function.");'
  - text: ' <code>hailstoneSequence()</code> debe devolver <code>[[27,82,41,124,8,4,2,1], [351, 77031]]</code> '
    testString: 'assert.deepEqual(hailstoneSequence(), res, "<code>hailstoneSequence()</code> should return <code>[[27,82,41,124,8,4,2,1], [351, 77031]]</code>");'

Challenge Seed

// noprotect
function hailstoneSequence () {
  const res = [];
  // Good luck!

  return res;
}

After Test

console.info('after the test');

Solution

// noprotect
function hailstoneSequence () {
  const res = [];

  function hailstone(n) {
    const seq = [n];
    while (n > 1) {
      n = n % 2 ? 3 * n + 1 : n / 2;
      seq.push(n);
    }
    return seq;
  }

  const h = hailstone(27);
  const hLen = h.length;
  res.push([...h.slice(0, 4), ...h.slice(hLen - 4, hLen)]);

  let n = 0;
  let max = 0;
  for (let i = 100000; --i;) {
    const seq = hailstone(i);
    const sLen = seq.length;

    if (sLen > max) {
      n = i;
      max = sLen;
    }
  }
  res.push([max, n]);

  return res;
}