Part 1: Repeat a Look-and-say sequence 40 times. Return the length.
def look_and_say(seq):
result = ''
index = 0
count = 0
buffer = None
for c in seq:
if c == buffer:
count += 1
else:
if buffer:
result += '{}{}'.format(count, buffer)
count = 1
buffer = c
result += '{}{}'.format(count, buffer)
return result
def repeat(f, n, seq):
for i in range(n):
seq = f(seq)
return seq
print(len(repeat(look_and_say, int(sys.argv[2]), sys.argv[1])))
I’ve already gone into far more detail on Look and Say sequences before. But this time, we’re doing it iteratively in Python! Basically, we just maintain a bit of state for which character we are currently counting. When we change, output; otherwise, incrememnt the change.
There are some interesting tricks you could do with regular expressions, but I doubt you can find something faster or much more elegant than this.
Part 2: Repeat 50 times.
There’s nothing particular interesting about this one. I’ve already accounted for this by passing in the second paramter on the command line.