Skip to content

Instantly share code, notes, and snippets.

@r3domfox
r3domfox / day22_tests.py
Created December 22, 2021 14:38
AOC2021 Day 22 (Python)
import re
line_format = re.compile(r'(on|off) x=(-?\d+)..(-?\d+),y=(-?\d+)..(-?\d+),z=(-?\d+)..(-?\d+)')
def read_line(line):
instr, *bounds = line_format.search(line).groups()
return instr, tuple(int(bound) for bound in bounds)
@r3domfox
r3domfox / day21_tests.py
Created December 21, 2021 15:25
AOC2021 Day 21 (Python)
def play(player_a_start, player_b_start):
a_score = 0
b_score = 0
a_pos = player_a_start
b_pos = player_b_start
die_rolls = 0
next_die_value = 0
def dice():
@r3domfox
r3domfox / day20_tests.py
Created December 21, 2021 11:47
AOC2021 Day 20 (Python)
def read_file(file):
i = iter(line.strip() for line in file)
algo = [c == '#' for c in next(i)]
assert len(algo) == 512
assert next(i) == ''
grid = set((x, y) for y, line in enumerate(i) for x, c in enumerate(line) if c == '#')
return algo, grid
@r3domfox
r3domfox / day19_tests.py
Created December 20, 2021 18:47
AOC2021 Day 19 (Python)
def read_file(file):
stripped = (line.strip() for line in file)
scanners = []
for line in stripped:
if line.startswith('---'):
scanner = set()
scanners.append(scanner)
elif len(line) > 0:
x_str, y_str, z_str = line.split(',')
@r3domfox
r3domfox / day18_tests.py
Created December 20, 2021 12:58
AOC2021 Day 18 (Python)
import functools
import math
def value_at(smallfish_number, path):
cursor = smallfish_number
for e in path:
if e == 'L':
cursor = cursor[0]
else:
@r3domfox
r3domfox / day16_tests.py
Created December 16, 2021 17:44
AOC2021 Day 16 (Python)
from functools import reduce
LITERAL = 4
TOTAL_LENGTH = 0
def hex_convert(c):
d = int(c, 16)
b = 8
@r3domfox
r3domfox / day14_tests.py
Created December 14, 2021 12:05
AOC2021 Day 14 (Python)
import re
def read_file(file):
i = iter(file)
start_string = next(i).strip()
next(i)
inserts = dict()
@r3domfox
r3domfox / day13_tests.py
Created December 13, 2021 22:17
AOC2021 Day 13 (Python)
import re
def read_line(line):
if m := re.match(r'(\d+),(\d+)', line):
x_str, y_str = m.groups()
return (int(x_str), int(y_str)), None
elif m := re.match(r'fold along ([xy])=(\d+)', line):
axis, pos = m.groups()
return None, (axis, int(pos))
@r3domfox
r3domfox / day12_tests.py
Created December 12, 2021 16:56
AOC2021 Day 12 (Python)
def cave_system(lines):
edges = {}
for line in lines:
start_label, end_label = line.strip().split("-")
targets = edges.get(start_label, set())
targets.add(end_label)
edges[start_label] = targets
reverse_targets = edges.get(end_label, set())
@r3domfox
r3domfox / day11_tests.py
Created December 12, 2021 13:54
AOC2021 Day 11 (Python)
class Octopus(object):
def __init__(self, initial_energy):
self.energy = initial_energy
self.adjacent_octopi = []
self.has_flashed = False
def add_adjacent(self, octopus):
self.adjacent_octopi.append(octopus)