Ejemplo n.º 1
0
 def __init__(self, data):
     self.grid = defaultdict(int)
     program = [int(n) for n in data.split(',')]
     self.comp = Computer(program)
     self.pos = 0, 0
     self.painted = set()
     self.dir_index = 0
Ejemplo n.º 2
0
Archivo: aoc10.py Proyecto: Skaft/aoc
def parse(data):
    asts = set()
    for y, line in enumerate(data.split('\n')):
        for x, char in enumerate(line):
            if char == '#':
                asts.add((x, y))
    return asts
Ejemplo n.º 3
0
def sol(data):
    dct = defaultdict(list)
    for line in data.split('\n'):
        inr, outr = line.split(')')
        dct[inr].append(outr)

    paths = {}

    def recrs(path):
        for outr in dct[path[-1]]:
            newpath = path + [outr]
            paths[outr] = newpath
            recrs(newpath)

    recrs(['COM'])

    # part 1
    print(sum(len(p) - 1 for p in paths.values()))

    # part 2
    sanpath = paths['SAN']
    mypath = paths['YOU']
    steps = 0
    for a, b in it.zip_longest(mypath[:-1], sanpath[:-1]):
        if a != b:
            steps += bool(a) + bool(b)

    print(steps)
Ejemplo n.º 4
0
def sol(data):
    dirs = {
        'R': (1, 0),
        'L': (-1, 0),
        'U': (0, -1),
        'D': (0, 1),
    }
    sets = []
    for wire in data.split('\n'):
        if wire:
            pts = {}
            sets.append(pts)
            x, y = 0, 0
            c = 0
            for d, *steps in wire.split(','):
                steps = int(''.join(steps))
                dx, dy = dirs[d]
                for _ in range(steps):
                    x += dx
                    y += dy
                    c += 1
                    pts[x, y] = c
    intsect = set(sets[0]).intersection(sets[1])
    # part 1
    print(min(abs(x) + abs(y) for x, y in intsect))

    # part 2
    print(min(sets[0][pt] + sets[1][pt] for pt in intsect))
Ejemplo n.º 5
0
def sol1(data):
    a, b = map(int, data.split('-'))
    c = 0
    for n in range(a, b + 1):
        n = str(n)
        if all(x <= y for x, y in zip(n, n[1:])) and len(set(n)) < 6:
            c += 1
    print(c)
Ejemplo n.º 6
0
def sol2(data):
    a, b = map(int, data.split('-'))
    c = 0
    for n in range(a, b + 1):
        n = str(n)
        if all(x <= y for x, y in zip(n, n[1:])) and 2 in Counter(n).values():
            c += 1
    print(c)
Ejemplo n.º 7
0
Archivo: aoc1.py Proyecto: Skaft/aoc
def sol1(data):
    res = 0
    for line in data.split():
        n = int(line) // 3 - 2
        if n > 0:
            res += n

    print(res)
Ejemplo n.º 8
0
Archivo: aoc1.py Proyecto: Skaft/aoc
def sol2(data):
    res = 0
    for line in data.split():
        n = int(line) // 3 - 2
        while n > 0:
            res += n
            n = n // 3 - 2

    print(res)
Ejemplo n.º 9
0
def parse(data):
    dct = {}
    for line in data.split('\n'):
        reactants, product = line.split(' => ')
        needed = []
        for thing in reactants.split(', '):
            amt, name = thing.split()
            needed.append((int(amt), name))
        amt, name = product.split()
        dct[name] = [int(amt), needed]
    return dct
Ejemplo n.º 10
0
def sol(data):
    start, stop = data.split('-')
    stop = [int(n) for n in stop]
    part1, part2 = 0, 0
    for digit_seq in gen_ascending(start):
        if digit_seq > stop:
            break
        counts = Counter(digit_seq)
        if max(counts.values()) >= 2:
            part1 += 1
        if 2 in counts.values():
            part2 += 1
    print(part1)
    print(part2)
Ejemplo n.º 11
0
Archivo: aoc2.py Proyecto: Skaft/aoc
def sol(data, noun=12, verb=2):
    arr = [int(n) for n in data.split(',')]
    arr[1] = noun
    arr[2] = verb
    i = 0
    while True:
        n, a, b, c = arr[i:i+4]
        if n == 99:
            break
        elif n == 1:
            arr[c] = arr[a] + arr[b]
        elif n == 2:
            arr[c] = arr[a] * arr[b]
        else:
            print('weird', n)
        i += 4
    return arr[0]
Ejemplo n.º 12
0
Archivo: aoc9.py Proyecto: Skaft/aoc
def sol(data, input=0):
    program = [int(n) for n in data.split(',')]
    comp = Computer(program, input=input)
    comp.run()
    print(comp.collect())
Ejemplo n.º 13
0
 def __init__(self):
     program = [int(n) for n in data.split(',')]
     self.comp = Computer(program)
     self.score = 0
     self.board = None
     self.setup()
Ejemplo n.º 14
0
    i = 0
    while True:
        op, a, b, c = arr[i:i + 4]

        A = a if isinstance(a, Symbol) else arr[a]
        B = b if isinstance(b, Symbol) else arr[b]

        if op == 99:
            break
        elif op == 1:
            arr[c] = A + B
        elif op == 2:
            arr[c] = A * B
        else:
            print('weird', op)
        i += 4
    return arr[0]


arr = [int(n) for n in data.split(',')]
target = 19690720
expr = sol(arr, x, y) - target

xc = int(expr.coeff(x, 1))
yc = int(expr.coeff(y, 1))
assert yc == 1
c = abs(int(expr.coeff(x, 0).coeff(y, 0)))

verb, noun = divmod(c, xc)
print(100 * verb + noun)