def load_instructions(filename, script=__file__): for line in load(filename, script=script): left, right = line.split(' = ') if left == 'mask': yield 'mask', right else: yield int(re.match(r'^mem\[(\d+)\]$', left).group(1)), int(right)
def part1(filename): instructions_list = [ line.split(',') for line in load(filename, script=__file__) ] intersections = set.intersection(*[ set(wire_positions(instructions)) for instructions in instructions_list ]) return closest_to_zero_by_manhattan(intersections)
def load_distances(filename, script=__file__): inputs = [ re.match(r'(.*) to (.*) = (.*)', line).groups() for line in load(filename, script=script) ] distances = {} for a, b, dist in inputs: distances[a, b] = distances[b, a] = int(dist) return distances
def load_multiline(filename, script=__file__): lines = [] for line in load(filename, script=script): if line: lines.append(line) else: yield lines lines = [] if lines: yield lines
def part2(filename): instructions_list = [ line.split(',') for line in load(filename, script=__file__) ] intersections = dict.fromkeys( set.intersection(*[ set(wire_positions(instructions)) for instructions in instructions_list ]), 0) for instructions in instructions_list: for dist, coord in enumerate(wire_positions(instructions), 1): if coord in intersections: intersections[coord] += dist return min(intersections.values())
def solve(filename, extra_check): start, end = map(int, load(filename, script=__file__)[0].split('-', 2)) return sum( is_sorted(s) and extra_check(s, 2) for s in map(str, range(start, end + 1)))
def load_steps(filename, script=__file__): return load(filename, script=__file__)[0]
def load_secret(filename, script=__file__): return load(filename, script=script)[0]
def load_dirs(filename, script=__file__): return [(line[0], int(line[1:])) for line in load(filename, script=script)]
def load_math(filename, script=__file__): return [ re.split(r' +', re.sub(r'([()])', r' \1 ', line).strip()) for line in load(filename, script=script) ]
def solve(filename, script): memory = load_memory(filename, script=__file__) input = parse_input(load(script, script=__file__)) return execute_springdroid(memory, input)
def load_regex(filename, regex, script=__file__): return [ re.match(regex, line).groups() for line in load(filename, script=script) ]
def load_grid(filename, script=__file__): return [[c for c in line] for line in load(filename, script=script)]
def part1(filename): lines = load(filename, script=__file__) return max(map(seat_id, lines))
def load_csv_ints(filename, script=__file__): return [ int(token) for line in load(filename, script=script) for token in line.split(',') ]
def part2(filename): lines = load(filename, script=__file__) seats = set(map(seat_id, lines)) for seat in range(min(seats) + 1, max(seats)): if seat not in seats: return seat
def load_orbits(filename, script=__file__): return [line.split(')') for line in load(filename, script=script)]
def load_commands(filename, regexes=CARD_REGEXES, script=__file__): return [match_regexes(line, regexes) for line in load(filename, script=script)]
def load_instructions(filename, script=__file__): instructions = [line.split(' -> ') for line in load(filename, script=script)] return {target: parse_instruction(expression) for expression, target in instructions}
def load_digits(filename, script=__file__): return [ int(digit) for line in load(filename, script=script) for digit in line ]
def load_dimensions(filename, script=__file__): return [map(int, line.split('x')) for line in load(filename, script=script)]
def load_instructions(filename, script=__file__): for line in load(filename, script=script): op, amt = line.split(' ') yield [op, int(amt)]
def load_paths(filename, script=__file__): return [parse_path(line) for line in load(filename, script=script)]
def load_formulas(filename, script=__file__): return { i[-1][1]: (i[-1][0], i[:-1]) for i in (list(map(split_quantity, re.split(', | => ', line))) for line in load(filename, script=script)) }
def load_grid(filename, script=__file__): rows = [line for line in load(filename, script=script)] return {(x, y): cell for y, row in enumerate(rows) for x, cell in enumerate(row)}
def load_bodies(filename, script=__file__): return [ Body(*map(int, re.match(r'<x=(.+), y=(.+), z=(.+)>', line).groups())) for line in load(filename, script=script) ]
def load_json(filename, script=__file__): return json.loads('\n'.join(load(filename, script=script)))
def load_memory(filename, script=__file__): return next([int(s) for s in line.split(',')] for line in load(filename, script=script))
def load_strings(filename, script=__file__): return load(filename, script=script)
def load_digits(filename, script=__file__): return next(to_digits(line) for line in load(filename, script=script))