2.2 KiB
2.2 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5e6dd14797f5ce267c2f19d0 | Successione Look-and-say | 5 | 385277 | look-and-say-sequence |
--description--
La successione [Look and say](https://en.wikipedia.org/wiki/Look and say sequence) è una sequenza di numeri definita ricorsivamente.
Definizione della successione
- Prendi un numero decimale
- Guarda (look) il numero, raggruppando visivamente le successioni consecutive della stessa cifra.
- Leggi (say) il numero, da sinistra a destra, gruppo per gruppo; quante ripetizioni di quella cifra ci sono - seguita dalla cifra raggruppata.
Un esempio:
- A partire dal numero 1, hai un 1 che produce 11
- A partire da 11, hai due 1. Cioè: 21
- A partire da 21, hai un 2, poi un 1. Cioè: (12)(11) che diventa 1211
- A partire da 1211, hai un 1, un 2, poi due 1. Cioè: (11)(12)(21) che diventa 111221
--instructions--
Scrivi una funzione che accetta una stringa come parametro, la elabora e restituisce la stringa risultante.
--hints--
lookAndSay
dovrebbe essere una funzione.
assert(typeof lookAndSay == 'function');
lookAndSay("1")
dovrebbe restituire una stringa.
assert(typeof lookAndSay('1') == 'string');
lookAndSay("1")
dovrebbe restituire "11"
.
assert.equal(lookAndSay('1'), '11');
lookAndSay("11")
dovrebbe restituire "21"
.
assert.equal(lookAndSay('11'), '21');
lookAndSay("21")
dovrebbe restituire "1211"
.
assert.equal(lookAndSay('21'), '1211');
lookAndSay("1211")
dovrebbe restituire "111221"
.
assert.equal(lookAndSay('1211'), '111221');
lookAndSay("3542")
dovrebbe restituire "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;
});
}