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)
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
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)
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)
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)
# 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)
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)
# 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)
def test1(fname, expected): data = util.load_str_lines_list(fname) result = 0 util.assert_equal(result, expected)