コード例 #1
0
def main(part1=True):
    values = list(
        map(lambda x: (x.split()[0], list(map(int,
                                              x.split()[1:]))),
            helper.load_in_list('input_21.txt', str)))
    ip = 0
    ip_reg = values[0][1][0]
    program = values[1:]

    reg = [0, 0, 0, 0, 0, 0]

    last = 0
    seen = set()
    while ip < len(program):

        if ip == 28:
            c = reg[2]
            if part1:
                print(c)
                break
            else:
                if c in seen:
                    print("Seen {} before. Last was {}".format(c, last))
                    break
                seen.add(c)
                last = c

        reg[ip_reg] = ip

        line = program[ip]
        func_name = func[line[0]]
        v = line[1]
        func_name(reg, v[0], v[1], v[2])
        ip = reg[ip_reg]
        ip += 1
コード例 #2
0
def main(n=0):
    values = list(map(lambda x : (x.split()[0], list(map(int, x.split()[1:]))), helper.load_in_list('input_21.txt', str)))
    # ip = 0
    ip_reg = values[0][1][0]
    program = values[1:]

    reg = [n,0,0,0,0,0]
    t = 0
    while reg[ip_reg] < len(program):
        ip = reg[ip_reg]
        reg_before = reg[::]

        line = program[reg[ip_reg]]
        func_name = func[line[0]]
        v = line[1]
        reg = func_name(reg, v[0], v[1], v[2])

        reg[ip_reg] += 1
    
        print(ip, line, reg_before, reg)
        t += 1
        if t > 30:
            break

    print(reg)
コード例 #3
0
ファイル: 17a.py プロジェクト: Moltenfire/AdventOfCode2018
def setup():
    lines = helper.load_in_list('input_17.txt', str)
    clay = set()
    for line in lines:
        v = list(map(int, re.findall("-?\d+", line)))
        if line[0] == 'y':
            for x in range(v[1], v[2] + 1):
                clay.add((x, v[0]))
        else:
            for y in range(v[1], v[2] + 1):
                clay.add((v[0], y))
    return clay
コード例 #4
0
def part2():
    op2inst = get_op2inst()

    program = list(
        map(lambda x: list(map(int, re.findall("-?\d+", x))),
            helper.load_in_list('input_16_2.txt', str)))

    reg = [0, 0, 0, 0]
    for line in program:
        inst = op2inst[line[0]]
        reg = instructions[inst](reg, line[1], line[2], line[3])

    print(reg)
コード例 #5
0
def setup():
    values = helper.load_in_list('input_16.txt', str)
    before = []
    reg = []
    after = []
    for s in values:
        x = list(map(int, re.findall("-?\d+", s)))
        if len(x) > 0:
            if "Before" in s:
                before.append(x)
            elif "After" in s:
                after.append(x)
            else:
                reg.append(x)
    return zip(before, reg, after)
コード例 #6
0
ファイル: 24a.py プロジェクト: Moltenfire/AdventOfCode2018
def setup():
    groups = []
    values = helper.load_in_list("input_24.txt", str)
    immune = True
    i = 1
    for line in values:
        if "Infection" in line:
            immune = False
            i = 1
            continue
        if line == "" or "Immune System" in line:
            continue
        g = create_unit(line, immune, i)
        groups.append(g)
        i += 1
    return groups
コード例 #7
0
def main(n=0):
    values = list(map(lambda x : (x.split()[0], list(map(int, x.split()[1:]))), helper.load_in_list('input_19.txt', str)))
    ip = 0
    ip_reg = values[0][1][0]
    program = values[1:]

    reg = [n,0,0,0,0,0]
    t = 0
    while ip < len(program):
        reg[ip_reg] = ip

        line = program[ip]
        func_name = func[line[0]]
        v = line[1]
        func_name(reg, v[0], v[1], v[2])
        ip = reg[ip_reg]
        ip += 1
    
        # print(reg, line[0], v)
        # t += 1
        # if t > 100:
        #     break

    print(reg)
コード例 #8
0
ファイル: 25a.py プロジェクト: Moltenfire/AdventOfCode2018
def get_values():
    return list(
        map(lambda x: tuple(map(int, re.findall("-?\d+", x))),
            helper.load_in_list('input_25.txt', str)))
コード例 #9
0
ファイル: 10a.py プロジェクト: Moltenfire/AdventOfCode2018
import collections
import itertools
import helper
import re
import matplotlib.pyplot as plt

values = helper.load_in_list('input_10.txt', str)
values = list(map(lambda x : list(map(int, re.findall("-?\d+", x))), helper.load_in_list('input_10.txt', str)))

points = []
velocities = []
for x,y,i,j in values:
    points.append([x,y])
    velocities.append((i,j))

def max_dist(p):
    minx = min(x for x, y in points)
    maxx = max(x for x, y in points)
    miny = min(y for x, y in points)
    maxy = max(y for x, y in points)
    return abs(maxx - minx) + abs(maxy - miny)

def forwards(p):
    for i in range(len(p)):
        p[i][0] += velocities[i][0]
        p[i][1] += velocities[i][1]
    return p

def backwards(p):
    for i in range(len(p)):
        p[i][0] -= velocities[i][0]
コード例 #10
0
import collections
import itertools
import helper

values = helper.load_in_list('input_3.txt', str)

two = 0
three = 0

for s in values:
    counter = collections.Counter(s)
    times = set(counter.values())
    if 2 in times:
        two += 1
    if 3 in times:
        three += 1

print(two * three)
コード例 #11
0
import itertools
import helper

values = helper.load_in_list('input_1.txt')

freq = 0
freq_reached = set([freq])
for f in itertools.cycle(values):
    freq += f
    if freq in freq_reached:
        print(freq)
        break
    freq_reached.add(freq)
コード例 #12
0
ファイル: 6a.py プロジェクト: Moltenfire/AdventOfCode2018
import collections
import itertools
import helper
import re

coords = {
    x: i
    for i, x in enumerate(
        list(
            map(lambda x: tuple(map(int, re.findall('\d+', x))),
                helper.load_in_list('input_6.txt', str))))
}

min_x = min(coords.keys(), key=lambda x: x[0])[0]
max_x = max(coords.keys(), key=lambda x: x[0])[0]
min_y = min(coords.keys(), key=lambda x: x[1])[1]
max_y = max(coords.keys(), key=lambda x: x[1])[1]

max_dist = 10000


def dist(a, b):
    return abs(a[0] - b[0]) + abs(a[1] - b[1])


l = []
edge = set()
total = 0
for y in range(min_y, max_y + 1):
    for x in range(min_x, max_x + 1):
        k = (x, y)
コード例 #13
0
ファイル: 7a.py プロジェクト: Moltenfire/AdventOfCode2018
import collections
import itertools
import helper
import re

v = [(x[5], x[36]) for x in helper.load_in_list('input_7.txt', str)]

steps = set()
edges = collections.defaultdict(list)
blocked = collections.defaultdict(int)
for a, b in v:
    steps.add(a)
    steps.add(b)
    edges[a].append(b)
    blocked[b] += 1

out = ""

while len(steps) > 0:
    possible = list(filter(lambda x: blocked[x] == 0, steps))
    possible.sort()
    c = possible[0]
    out += c
    steps.remove(c)
    for b in edges[c]:
        blocked[b] -= 1

print(out)
コード例 #14
0
ファイル: 23b.py プロジェクト: Moltenfire/AdventOfCode2018
import collections
import itertools
import helper
import re
import math

file = "23.txt"
# file = "input_23.txt"

values = list(
    map(lambda x: list(map(int, re.findall("-?\d+", x))),
        helper.load_in_list(file, str)))  #


def calc_dist(a, b):
    return abs(a[0] - b[0]) + abs(a[1] - b[1]) + abs(a[2] - b[2])


def mid(a, b, r1, r2):
    ratio1 = r2 / (r1 + r2)
    ratio2 = r1 / (r1 + r2)
    return (int(
        (a[0] * ratio1 + b[0] * ratio2)), int((a[1] * ratio1 + b[1] * ratio2)),
            int((a[2] * ratio1 + b[2] * ratio2)))


def in_range(p, c):
    return len([0 for q, r in c.items() if calc_dist(p, q) <= r])


def get_most_near(minx, maxx, miny, maxy, minz, maxz, c, dist):
コード例 #15
0
ファイル: 5a.py プロジェクト: Moltenfire/AdventOfCode2018
import helper

def collapse(l):
    stack = []
    for y in l:
        if not stack:
            stack.append(y)
        else:
            x = stack[-1]
            if x - 32 == y or x + 32 == y:
                stack.pop()
            else:
                stack.append(y)
    return len(stack)

s = helper.load_in_list('input_5.txt', str)[0]
# s = "dabAcCaCBAcCcaDA"
l = list(map(ord, s))

k = collapse(l)
print(k)

lengths = []
for i in range(65, 91):
    k = collapse([x for x in l if x != i and x - 32 != i])
    lengths.append(k)
print(min(lengths))
コード例 #16
0
import collections
import itertools
import helper
import re

values = list(map(lambda x : list(map(int, re.findall('\d+', x))), helper.load_in_list('input_3.txt', str)))

claims = []
for v in values:
    for i in range(v[1], v[1] + v[3]):
        for j in range(v[2], v[2] + v[4]):
            claims.append((i, j)) 

cc = collections.Counter(claims)

total = 0
single_claim = []
for key, value in cc.items():
    if value > 1:
        total += 1

print(total)

for v in values:
    claimed = False
    for i in range(v[1], v[1] + v[3]):
        for j in range(v[2], v[2] + v[4]):
            if cc[(i, j)] > 1:
                claimed = True

    if not claimed: