Look and Say Numbers
What’s next?
The first six look and say numbers
1 11 21 1211 111221 312211 ...
A Python Look and Say Implementation
The following implementation of the look and say sequence leans on Python’s iterators and generators, and provides an incidental example of how to use Python’s doctest module.
def look_and_say_numbers(): """ Generate the look-and-say number sequence. Start from '1', which we say 'one one', giving '11', which we say 'two ones', giving '21', which we say 'one two, one one', giving '1211' etc. >>> g = look_and_say_numbers() >>> g.next(), g.next(), g.next(), g.next() ('1', '11', '21', '1211') """ from itertools import groupby def group_length(gp): " Return the length of an iterable returned by groupby. " return sum(1 for _ in gp) look_say_number = "1" while True: yield look_say_number look_say_number = "".join([ "%d%s" % (group_length(group), digit) for digit, group in groupby(look_say_number)]) if __name__ == "__main__": import doctest doctest.testmod() from itertools import islice for look_say_number in islice(look_and_say_numbers(), 10): print look_say_number
Feedback
Here's what the Online Encylopedia of Integer Sequences says about Look and Say Numbers.
The last part doesn't go at mine