Ejemplo n.º 1
0
def playTheGame(turn):
    numbers = [int(line) for line in loadInputLines(2020, 15)[0].split(',')]
    spoken = {}
    i = 0
    last = 0
    turn = turn - 1
    while (i < len(numbers)):
        last = numbers[i]
        if last not in spoken:
            spoken[last] = (i, 0, 1)
        else:
            spoken[last] = (i, spoken[last][0], spoken[last][2] + 1)
        i += 1
    while True:
        last = 0 if spoken[last][2] == 1 else spoken[last][0] - spoken[last][1]
        if last not in spoken:
            spoken[last] = (i, 0, 1)
        else:
            spoken[last] = (i, spoken[last][0], spoken[last][2] + 1)
        if i == turn:
            return last
        i += 1
Ejemplo n.º 2
0
from aocUtils import loadInputLines

lines = loadInputLines(2020, 6)


def part1():
    t = 0
    letters = set()
    for line in lines:
        for char in line:
            letters.add(char)
        if line == '':
            t += len(letters)
            letters.clear()
    t += len(letters)
    return t


def part2():
    t = 0
    letters = {}
    people = 0
    for line in lines:
        if line == '':
            t += sum(i == people for i in letters.values())
            letters.clear()
            people = 0
        else:
            people += 1
            for char in line:
                if char in letters:
Ejemplo n.º 3
0
from aocUtils import loadInputLines, printT

commands = [(line[0], int(line[1:])) for line in loadInputLines(2020, 12)]

def part1():
    v = 90
    pos = (0,0)
    for c in commands:
        if c[0] == 'L':
            v = (v - c[1]) % 360
        elif c[0] == 'R':
            v = (v + c[1]) % 360
        elif c[0] == 'N' or (c[0] == 'F' and v == 0):
            pos = (pos[0], pos[1] + c[1])
        elif c[0] == 'E' or (c[0] == 'F' and v == 90):
            pos = (pos[0] + c[1], pos[1])
        elif c[0] == 'S' or (c[0] == 'F' and v == 180):
            pos = (pos[0], pos[1] - c[1])
        elif c[0] == 'W' or (c[0] == 'F' and v == 270):
            pos = (pos[0] - c[1], pos[1])
    return abs(pos[0]) + abs(pos[1])

def part2():
    pos = (0,0)
    waypoint = (10, 1)
    for c in commands:
        if c[0] == 'L':
            for _ in range(0, int(c[1]/90)):
                waypoint = (waypoint[1] * -1, waypoint[0])
        elif c[0] == 'R':
            for _ in range(0, int(c[1]/90)):
Ejemplo n.º 4
0
from aocUtils import loadInputLines, printT

lines = [line.replace(' ', '') for line in loadInputLines(2020, 18)]


def evaluate(expression: str):

    s = expression.find('(')
    if s >= 0:
        count = 1
        f = s
        while True:
            f += 1
            if expression[f] == '(':
                count += 1
            elif expression[f] == ')':
                count -= 1
            if count == 0:
                break
        e = ''
        if s > 0:
            e += expression[:s]
        e += str(evaluate(expression[s + 1:f]))
        if f + 1 < len(expression):
            e += expression[f + 1:]
        # if s ==0:
        #     res = evaluate(expression[s+1:f])
        # else:
        #     res = evaluate(expression[:s-1])
        #     if expression[s-1] == '*':
        #         res *= evaluate(expression[s+1:f])