Exemple #1
0
def test2(fname, expected):
    data = util.load_str_lines_list(fname)
    prog = []
    for line in data:
        op, arg = line.split()
        prog.append([op, int(arg)])

    done = False
    acc = 0
    ip = 0
    for instr, arg in prog:
        fixed_prog = prog.copy()
        if instr == 'nop':
            fixed_prog[ip] = ['jmp', arg]
        elif instr == 'jmp':
            fixed_prog[ip] = ['nop', arg]
        else:
            ip += 1
            continue

        ip += 1
        done, acc = run(fixed_prog)
        if done:
            break

    util.assert_equal(acc, expected)
Exemple #2
0
def load_rules(fname: str):
    data = util.load_str_lines_list(fname)
    rules = dict()
    for line in data:
        outer, inner = parse_rule(line)
        rules[outer] = inner
    return rules
Exemple #3
0
def test2(fname, expected):
    data = util.load_str_lines_list(fname)
    rules = dict()
    for line in data:
        outer, inner = parse2(line)
        rules[outer] = inner

    result = countInner(rules, 'shiny gold') - 1
    util.assert_equal(result, expected)
Exemple #4
0
def test1(fname, expected):
    data = util.load_str_lines_list(fname)
    rules = dict()
    for line in data:
        outer, inner = parse1(line)
        rules[outer] = inner

    result = len(allOuters(rules, 'shiny gold'))
    util.assert_equal(result, expected)
Exemple #5
0
def test(fname: str, new_state, expected: int):
    data = util.load_str_lines_list(fname)
    seats = data
    while True:
    #    show(seats)
        seats2 = apply_rules(seats, new_state)
        if seats == seats2:
            break
        seats = seats2

    result = ''.join(seats).count('#')
    util.assert_equal(result, expected)
Exemple #6
0
#        rules[k] = simplify(v, rules)
    
    return rules

# How many messages completely match rule 0?
def solve1(messages, rules_data):
    rules = parse(rules_data)
    result = 0
    for msg in messages:
        res, L = match(msg, rules[0], rules)
        if res and L == len(msg):
            result += 1
    return result

rules_sample = parse(rules_sample_data)
#print(rules_sample)

util.assert_equal(match('ababbb',rules_sample[0], rules_sample), (True, 6))
util.assert_equal(match('abbbab',rules_sample[0], rules_sample), (True, 6))
util.assert_equal(match('bababa',rules_sample[0], rules_sample), (False, 6))
util.assert_equal(match('aaabbb',rules_sample[0], rules_sample), (False, 6))
util.assert_equal(match('aaaabbb',rules_sample[0], rules_sample), (True, 6))

rules_data = util.load_str_lines_list('input_rules.txt')
messages = util.load_str_lines_list('input_messages.txt')
result = solve1(messages, rules_data)
print("Part 1.", result)
util.assert_equal(result, 299)


Exemple #7
0
def solve2(data, rules, my):
    tickets = get_valid_tickets(data, rules)
    tickets.append(my) # if it helps
    
    colsByRule = findAllCols(tickets, rules)
    colByRule = findOneCol(colsByRule)

    result = 1
    for i in range(6):
        col = colByRule[i]
        result *=  my[col]
    return result
        

tickets = util.load_str_lines_list('input_tickets.txt')
my_ticket = [73,53,173,107,113,89,59,167,137,139,71,179,131,181,67,83,109,127,61,79]
rules_data = util.load_str_lines_list('input_rules.txt')
rules = []
for line in rules_data:
    limits = util.findall_ints(line)
    rules.append(limits)

result = solve1(tickets, rules)
print("Part 1.", result)
util.assert_equal(result, 20975)

result = solve2(tickets, rules, my_ticket)
print("Part 2.", result)
util.assert_equal(result, 910339449193)
Exemple #8
0
# BFFFBBFRRR
def decode(s: str) -> int:
    # sbin = s.replace('F', '0').replace('B', '1').replace('L', '0').replace('R', '1')
    sbin = s.translate(str.maketrans('FBLR', '0101'))
    return int(sbin, 2)


def test1(data, expected):
    seats = map(decode, data)
    result = max(seats)
    util.assert_equal(result, expected)


def test2(data, expected):
    seats = map(decode, data)
    hi = max(seats)
    lo = min(seats)
    free_seats = set(range(lo, hi + 1)) - set(seats)
    my_seat = free_seats.pop()
    util.assert_equal(my_seat, expected)


util.assert_equal(decode('BFFFBBFRRR'), 567)

print("Part 1.")
data = util.load_str_lines_list('input.txt')
test1(data, 874)

print("Part 2.")
test2(data, 594)
Exemple #9
0
def test1(fname, expected):
    data = util.load_str_lines_list(fname)
    result = 0

    util.assert_equal(result, expected)