2021-06-15 00:49:18 -07:00
---
id: 5e6dd14797f5ce267c2f19d0
2022-02-19 12:56:08 +05:30
title: Successione Look-and-say
2021-06-15 00:49:18 -07:00
challengeType: 5
forumTopicId: 385277
dashedName: look-and-say-sequence
---
# --description--
2022-02-19 12:56:08 +05:30
La successione [Look and say ](https://en.wikipedia.org/wiki/Look and say sequence ) è una sequenza di numeri definita ricorsivamente.
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
Definizione della successione
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
< ul > < li > Prendi un numero decimale< / li >
< li > < span > Guarda< / span > (look) il numero, raggruppando visivamente le successioni consecutive della stessa cifra.< / li >
< li > < span > Leggi< / span > (say) il numero, da sinistra a destra, gruppo per gruppo; quante ripetizioni di quella cifra ci sono - seguita dalla cifra raggruppata.< / li > < / ul > < span > Questo diventa il numero successivo della successione.< / span >
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
Un esempio:
2021-06-15 00:49:18 -07:00
2022-02-19 12:56:08 +05:30
< ul > < li > A partire dal numero 1, hai < span > un< / span > 1 che produce 11< / li >
< li > A partire da 11, hai < span > due< / span > 1. Cioè: 21< / li >
< li > A partire da 21, hai < span > un< / span > 2, poi < span > un< / span > 1. Cioè: (12)(11) che diventa 1211< / li >
< li > A partire da 1211, hai < span > un< / span > 1, < span > un< / span > 2, poi < span > due< / span > 1. Cioè: (11)(12)(21) che diventa 111221< / li > < / ul >
2021-06-15 00:49:18 -07:00
# --instructions--
2022-02-19 12:56:08 +05:30
Scrivi una funzione che accetta una stringa come parametro, la elabora e restituisce la stringa risultante.
2021-06-15 00:49:18 -07:00
# --hints--
2022-02-19 12:56:08 +05:30
`lookAndSay` dovrebbe essere una funzione.
2021-06-15 00:49:18 -07:00
```js
assert(typeof lookAndSay == 'function');
```
2022-02-19 12:56:08 +05:30
`lookAndSay("1")` dovrebbe restituire una stringa.
2021-06-15 00:49:18 -07:00
```js
assert(typeof lookAndSay('1') == 'string');
```
2022-02-19 12:56:08 +05:30
`lookAndSay("1")` dovrebbe restituire `"11"` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(lookAndSay('1'), '11');
```
2022-02-19 12:56:08 +05:30
`lookAndSay("11")` dovrebbe restituire `"21"` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(lookAndSay('11'), '21');
```
2022-02-19 12:56:08 +05:30
`lookAndSay("21")` dovrebbe restituire `"1211"` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(lookAndSay('21'), '1211');
```
2022-02-19 12:56:08 +05:30
`lookAndSay("1211")` dovrebbe restituire `"111221"` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(lookAndSay('1211'), '111221');
```
2022-02-19 12:56:08 +05:30
`lookAndSay("3542")` dovrebbe restituire `"13151412"` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(lookAndSay('3542'), '13151412');
```
# --seed--
## --seed-contents--
```js
function lookAndSay(str) {
}
```
# --solutions--
```js
function lookAndSay(str) {
return str.replace(/(.)\1*/g, function(seq, p1) {
return seq.length.toString() + p1;
});
}
```