The Look and say sequence is a recursively defined sequence of numbers studied most notably by John Conway.

**Sequence Definition**

- Take a decimal number
*Look*at the number, visually grouping consecutive runs of the same digit.*Say*the number, from left to right, group by group; as how many of that digit there are – followed by the digit grouped.

- This becomes the next number of the sequence.

**An example:**

- Starting with the number 1, you have
*one*1 which produces 11. - Starting with 11, you have
*two*1’s i.e. 21 - Starting with 21, you have
*one*2, then*one*1 i.e. (12)(11) which becomes 1211 - Starting with 1211 you have
*one*1,*one*2, then*two*1’s i.e. (11)(12)(21) which becomes 111221

**Task description**

- Write a program to generate successive members of the look-and-say sequence.

#include <string> #include <sstream> std::string lookandsay(const std::string &s) { std::ostringstream r; for (unsigned int i = 0; i != s.length(); ) { unsigned int new_i = s.find_first_not_of(s[i], i+1); if (new_i == std::string::npos) new_i = s.length(); r << new_i - i << s[i]; i = new_i; } return r.str(); } #include <iostream> int main() { std::string laf = "1"; std::cout << laf << std::endl; for (int i = 0; i < 10; i++) { laf = lookandsay(laf); std::cout << laf << std::endl; } return 0; }

Content is available under GNU Free Documentation License 1.2.