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
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:
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)):
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])