freeCodeCamp/curriculum/challenges/portuguese/10-coding-interview-prep/rosetta-code/look-and-say-sequence.md

2.1 KiB

id title challengeType forumTopicId dashedName
5e6dd14797f5ce267c2f19d0 Sequência para olhar e dizer 5 385277 look-and-say-sequence

--description--

A sequência para olhar e dizer é uma sequência de números recursivamente definida.

Definição da sequência

  • Recebe um número decimal
  • Olha para o número, agrupando visualmente sequências consecutivas do mesmo dígito.
  • Diz o número, da esquerda para a direita, grupo após grupo, descrevendo quantos daquele dígito há na sequência, e, logo após, os dígitos agrupados.
Esse se torna o próximo número da sequência.

Exemplo:

  • Começando pelo número 1, você tem um 1, o que gera o número 11
  • Começando com 11, você tem dois 1s. Ou seja, 21
  • Começando com 21, você tem um 2 e depois um 1. Ou seja: (12)(11), que depois se torna 1211
  • Começando com 1211, você tem um 1, um 2 e dois 1s. Ou seja: (11)(12)(21), que depois se torna 111221

--instructions--

Escreva uma função que aceita uma string como parâmetro, faz seu processamento e retorna a string resultante.

--hints--

lookAndSay deve ser uma função.

assert(typeof lookAndSay == 'function');

lookAndSay("1") deve retornar uma string.

assert(typeof lookAndSay('1') == 'string');

lookAndSay("1") deve retornar "11".

assert.equal(lookAndSay('1'), '11');

lookAndSay("11") deve retornar "21".

assert.equal(lookAndSay('11'), '21');

lookAndSay("21") deve retornar "1211".

assert.equal(lookAndSay('21'), '1211');

lookAndSay("1211") deve retornar "111221".

assert.equal(lookAndSay('1211'), '111221');

lookAndSay("3542") deve retornar "13151412".

assert.equal(lookAndSay('3542'), '13151412');

--seed--

--seed-contents--

function lookAndSay(str) {

}

--solutions--

function lookAndSay(str) {
    return str.replace(/(.)\1*/g, function(seq, p1) {
      return seq.length.toString() + p1;
    });
}