from utils import read_input raw = read_input.read_input_strings('day21') def parse_ingredients(line): pass def part_one(): pass def part_two(): pass if __name__ == '__main__': part_one() part_two()
from utils import read_input, regex raw_rules = read_input.read_input_strings('day7') def parse_rule(rule): [in_bag, out_bags] = rule.split(' contain ') in_color = regex.find_first_match(in_bag, r'(.*) bags?') outs = [] for out_bag in out_bags[:-1].split(', '): out = regex.find_all_match(out_bag, r'((\d+) (.*) bags?)') if len(out) > 0: [(_, number, color)] = out outs.append((int(number), color)) return in_color, outs rules = [parse_rule(rule) for rule in raw_rules] def find_rules_by_out_color(out_color): result = [] for rule in rules: in_color, outs = rule for (number, color) in outs: if out_color == color: result.append(rule) return result def find_rule_by_in_color(color):
from utils import read_input import math raw = read_input.read_input_strings('day18') def evaluate_precedence(expression): return math.prod([ sum([int(number) for number in group.split('+')]) for group in expression.split('*') ]) def evaluate_sequential(expression): result = 0 pointer = 0 operator = '+' numbers = [] while pointer < len(expression): current = expression[pointer] if current == '+' or current == '*': if operator == '+': result += int(''.join(numbers)) else: result *= int(''.join(numbers)) operator = current numbers.clear() else: numbers.append(current) pointer += 1 if len(numbers) > 0:
from utils import read_input raw_inputs = read_input.read_input_strings('day2') def parse_password(raw): [rule, password] = raw.split(': ') [policy, char] = rule.split(' ') [low, high] = policy.split('-') return int(low), int(high), char, password def is_password_valid(policy): low, high, char, password = policy count = len([c for c in password if c == char]) return low <= count <= high def is_password_valid_new(policy): pos1, pos2, char, password = policy return (password[pos1 - 1] == char and password[pos2 - 1] != char) or\ (password[pos1 - 1] != char and password[pos2 - 1] == char) def part_one(): result = len([p for p in raw_inputs if is_password_valid(parse_password(p))]) print(f'{result} passwords are valid.') def part_two(): result = len([p for p in raw_inputs if is_password_valid_new(parse_password(p))])