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

2.1 KiB

id title challengeType forumTopicId dashedName
5e6dd14797f5ce267c2f19d0 Successione Look-and-say 1 385277 look-and-say-sequence

--description--

La successione Look-and-say è 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.
Questo diventa il numero successivo della successione.

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;
    });
}