Exemple #1
0
def main():
    lines = aoc_utils.readlines()
    yield "Part 1: " + str(process(lines))
    for x in range(len(lines)):
        if lines[x][0:3] == "nop":
            lines[x] = "jmp" + lines[x][3:]
            yield process(lines)
            lines = aoc_utils.readlines()
        elif lines[x][0:3] == "jmp":
            lines[x] = "nop" + lines[x][3:]
            yield process(lines)
            lines = aoc_utils.readlines()
Exemple #2
0
def main():
    inputs = aoc_utils.readlines()
    old_inputs = [x for x in inputs]
    while True:
        inputs = step(inputs)
        if inputs == old_inputs:
            break
        old_inputs = [x for x in inputs]
    count = 0
    for x in inputs:
        for y in x:
            if y == "#":
                count += 1
    print(count)
Exemple #3
0
def solve(part2=False):
    inputs = aoc_utils.readlines()
    de, dn, sn, se, direction, directions = 10 if part2 else 0, 1 if part2 else 0, 0, 0, 0, list(
        "ESWN")
    for x in inputs:
        if x[0] == "F" and not part2:
            x = directions[(direction // 90) % 4] + x[1:]
        dn, de, direction, se, sn = dn + int(x[1:]) if x[0] == "N" else (
            dn - int(x[1:])
            if x[0] == "S" else dn), de + int(x[1:]) if x[0] == "E" else (
                de - int(x[1:]) if x[0] == "W" else de
            ), direction + int(x[1:]) if (x[0] == "R" and not part2) else (
                direction - int(x[1:]) if x[0] == "L" else
                direction), se + de * int(x[1:]) if (
                    x[0] == "F" and part2) else se, sn + dn * int(x[1:]) if (
                        x[0] == "F" and part2) else sn
        if x[0] == "L" and part2:
            for y in range(int(x[1:]) // 90):
                de, dn = -dn, de
        elif x[0] == "R" and part2:
            for y in range(int(x[1:]) // 90):
                de, dn = dn, -de
    return abs(sn) + abs(se) if part2 else abs(de) + abs(dn)
Exemple #4
0
import aoc_utils
import itertools
import re

lines = aoc_utils.readlines()
ingredients = []
for line in lines:
    ingredients.append(list(map(int, re.findall(r'-?\d', line))))
maxscore = 0
for a, b, c, d in itertools.product(range(0, 101), range(0, 101),
                                    range(0, 101), range(0, 101)):
    if a + b + c + d == 100:
        score = 1
        for i in range(len(ingredients[0])):
            part = 0
            part += a * ingredients[0][i]
            part += b * ingredients[1][i]
            part += c * ingredients[2][i]
            part += d * ingredients[3][i]
            if part > 0:
                score *= part
        if score // 500 > maxscore and part == 500:
            maxscore = score // 500
print(maxscore)
Exemple #5
0
from collections import *
import itertools
import random
import re
import sys
import aoc_utils
import queue
from operator import *
import math
import functools
from copy import deepcopy
tickets = aoc_utils.readlines()
rules = []
myticketnext = False
ot = []
for ticket in tickets:
    if ticket.count("or") != 0:
        name, rule = ticket.split(":")
        first, _, second = rule.split()
        rules.append(
            (name, (int(first.split('-')[0]), int(first.split('-')[1])),
             (int(second.split('-')[0]), int(second.split('-')[1]))))
    elif myticketnext == False:
        if ticket != "nearby tickets:" and ticket != "your ticket:":
            ot.append(list(map(int, ticket.split(','))))
    else:
        myticket = list(map(int, ticket.split(',')))
    myticketnext = False
    if ticket == "your ticket:":
        myticketnext = True
gt = []
Exemple #6
0
from collections import *
import itertools
import random
import re
import sys
import aoc_utils
import queue
import modint
from operator import *
import functools
import math
from copy import deepcopy
inputs = aoc_utils.readlines()
time = int(inputs[0])
buses = [int(x) for x in inputs[1].split(',') if x != 'x']
minimum = 10000000000000000000000000000000000000000000
bus = 0
for x in buses:
    print(x - time % x)
    print(minimum)
    if x - time % x <= minimum:
        minimum = x - time % x
        bus = x
bus_list = inputs[1].split(',')
#chinese remainder theorem
busx = [int(x) for x in bus_list if x != "x"]
busn = [int(x) - bus_list.index(x) for x in bus_list if x != "x"]
print(busx)
print(busn)
print(modint.chinese_remainder(busx, busn))
Exemple #7
0
import aoc_utils
import re
amount = 0
vowels = list('aioue')
for x in aoc_utils.readlines():
    if re.search(r"(..).*\1", x) is not None:
        print("Half matched", x)
        if re.search(r"(.).\1", x) is not None:
            print("Matched:", x)
            amount += 1
    else:
        print(x)
print(amount)
Exemple #8
0
from collections import *
import itertools
import random
import re
import sys
import aoc_utils
import queue
from operator import *
import math
import functools
from copy import deepcopy
p1,p2 = aoc_utils.readlines()
p1,p2 = int(p1),int(p2)
tocheck,counter = 1,0
while tocheck!=p1:
    tocheck = (tocheck*7)%20201227
    counter += 1
print(pow(p2,counter)%20201227)