Exemple #1
0
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()
Exemple #2
0
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):
Exemple #3
0
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:
Exemple #4
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))])