Advent of code

 10 décembre 2015 

  Elves Look, Elves Say :
  1. code_partie1.py
  2. code_partie1_oneLiner.py
  3. code_partie1_realOneLiner.py
  4. code_partie2_coupure.py
  5. code_partie2_coupure_moinsEfficace.py
  6. code_partie2_coupures.diffy
  7. code_partie2_elements.py
from functools import cache
from itertools import groupby

inputString = '1113222113'

def nbRepet(s):
    c = s[0]
    n = 1
    for i in range(1,len(s)):
        if s[i] != c:
            break
        n += 1
    return n

@cache
def lookandsay(s):
    if len(s) < 10:
        return ''.join([(str(len(list(i[1])))+i[0]) for i in groupby(s)])      
    coupure = len(s) // 2
    a = lookandsay(s[:coupure])
    b = lookandsay(s[coupure:])
    if a[-1] == b[1]:
        return a[:-2] + str(int(a[-2])+int(b[0])) + b[1:]
    else:
        return a + b


s = inputString

for i in range(50):
    s = lookandsay(s)

print(len(s))