Look and say numbers

地址:http://www.codewars.com/kata/53ea07c9247bc3fcaa00084d/train/python

 

There exists a sequence of numbers that follows the pattern

1

11

21

1211

111221

312211

13112221

1113213211 . . .

Starting with "1" the following lines are produced by "saying what you see", so that line two is "one one", line three is "two one(s)", line four is "one two one one".

 

代码如下:

import collections

def say(stra):
    lenA = len(stra)
    dic = collections.OrderedDict()
    ans = ""
    for i in range(0,lenA):
        if dic.has_key(stra[i]):
            dic[stra[i]] +=  1
        else:
            dic[stra[i]] = 1

        if i > 0 and stra[i] != stra[i-1] :
            ans += (str(dic[stra[i-1]]) + stra[i-1])
            dic[stra[i-1]] = 0

    ans += (str(dic[stra[i]]) + stra[i])
            
    return ans

def look_and_say(data='1', maxlen=5):
    lista = []
    lista.append(say(data))
    for i in range(1,maxlen):
        lista.append(say(lista[i-1]))
    return lista

 

posted @ 2014-10-10 11:29  开开甲  阅读(432)  评论(0编辑  收藏  举报