2.2 KiB
2.2 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5e6dd14797f5ce267c2f19d0 | Sequência para olhar e dizer | 5 | 385277 | look-and-say-sequence |
--description--
A [sequência de olhar e dizer](https://en.wikipedia.org/wiki/Look and say sequence) é uma sequência de números definida recursivamente.
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.
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;
});
}