77 lines
2.5 KiB
Markdown
Raw Normal View History

---
id: 5e6dd14797f5ce267c2f19d0
title: Look-and-say sequence
challengeType: 5
forumTopicId: 385277
---
## Description
<section id='description'>
The <a href="https://en.wikipedia.org/wiki/Look and say sequence" target="_blank">Look and say sequence</a> is a recursively defined sequence of numbers.
Sequence Definition
<ul><li>Take a decimal number</li>
<li><span>Look</span> at the number, visually grouping consecutive runs of the same digit.</li>
<li><span>Say</span> the number, from left to right, group by group; as how many of that digit there are - followed by the digit grouped.</li></ul><span> This becomes the next number of the sequence.</span>
<span>An example:</span>
<ul><li>Starting with the number 1, you have <span>one</span> 1 which produces 11</li>
<li>Starting with 11, you have <span>two</span> 1's. I.E.: 21</li>
<li>Starting with 21, you have <span>one</span> 2, then <span>one</span> 1. I.E.: (12)(11) which becomes 1211</li>
<li>Starting with 1211, you have <span>one</span> 1, <span>one</span> 2, then <span>two</span> 1's. I.E.: (11)(12)(21) which becomes 111221</li></ul>
</section>
## Instructions
<section id='instructions'>
Write a function that accepts a string as a parameter, processes it, and returns the resultant string.
</section>
## Tests
<section id='tests'>
``` yml
tests:
- text: <code>lookAndSay</code> should be a function.
testString: assert(typeof lookAndSay == 'function');
- text: <code>lookAndSay("1")</code> should return a string.
testString: assert(typeof lookAndSay("1") == 'string');
- text: <code>lookAndSay("1")</code> should return <code>"11"</code>.
testString: assert.equal(lookAndSay("1"), "11");
- text: <code>lookAndSay("11")</code> should return <code>"21"</code>.
testString: assert.equal(lookAndSay("11"), "21");
- text: <code>lookAndSay("21")</code> should return <code>"1211"</code>.
testString: assert.equal(lookAndSay("21"), "1211");
- text: <code>lookAndSay("1211")</code> should return <code>"111221"</code>.
testString: assert.equal(lookAndSay("1211"), "111221");
- text: <code>lookAndSay("3542")</code> should return <code>"13151412"</code>.
testString: assert.equal(lookAndSay("3542"), "13151412");
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='js-seed'>
```js
function lookAndSay(str) {
}
```
</div>
</section>
## Solution
<section id='solution'>
```js
function lookAndSay(str) {
return str.replace(/(.)\1*/g, function(seq, p1) {
return seq.length.toString() + p1;
});
}
```
</section>