Exemplo n.º 1
0
def part1(s, it=10):
    cups = mapl(int, s)
    min_val = min(cups)
    max_val = max(cups)

    for _ in range(it):
       curr_cup = cups.pop(0)
       picked_cups, rest = cups[:3],\
               cups[3:] + [curr_cup]
       dest_cup = decr(curr_cup, min_val, max_val, picked_cups)
       # print(dest_cup) 
       insert_idx = rest.index(dest_cup) + 1
       cups = rest[:insert_idx] + picked_cups + rest[insert_idx:]
    index_1 = cups.index(1)
    return ''.join(mapl(str, cups[index_1+1:] + cups[:index_1]))
Exemplo n.º 2
0
def conds(s):
    m = {}
    for c in s.strip().split('\n'):
        k, v = c.split(':')
        m[k] = mapl(lambda cn: mapl(int, cn.split('-')), v.split('or'))
    return m
Exemplo n.º 3
0
def tickets(s):
    return mapl(lambda l: mapl(int, l.split(',')), s.strip().split('\n')[1:])
Exemplo n.º 4
0
def decks(s):
    parse_deck = lambda d: mapl(int, (d.split('\n'))[1:])
    return mapl(parse_deck, s.split('\n\n'))
Exemplo n.º 5
0
def parse(s):
    return mapl(parse_img, s.split('\n\n'))
Exemplo n.º 6
0
 def _reduce(kv):
     if m[kv] in ['a', 'b']:
         return m[kv]
     else:
         return flatten([mapl(''.join, product(*[_reduce(p) for p in k.split(' ')])) for k in m[kv]])
Exemplo n.º 7
0
    max_val, min_val  = 0, float('Infinity')
    prev_val= cups[-1]
    for c in cups:
        if max_val < c:
            max_val = c
        if min_val > c:
            min_val = c
        next_cup[prev_val] = c
        prev_val = c
    curr_cup = cups[0]
    for i in range(it):
        chosen = [next_cup[curr_cup],\
                next_cup[next_cup[curr_cup]],\
                next_cup[next_cup[next_cup[curr_cup]]]]
        move_to = decr(curr_cup, min_val, max_val, chosen)
        next_cup[curr_cup] = next_cup[chosen[2]]
        next_cup[chosen[2]] = next_cup[move_to]
        next_cup[move_to] = chosen[0]
        curr_cup = next_cup[curr_cup]
    # return stringify(1, next_cup).replace(', ', '')[1:]
    return  next_cup[1] * next_cup[next_cup[1]]

inp = '962713854'

# print(part1(s, 100))

t = time()
print(part2(mapl(int, inp) + list(range(10, 1000001)), 10000000))
print('time : ', time() - t)
print('------------------')