def main() -> None: """Determine path through a map of trees.""" # Part A test_answer = 7 file = config.TestFile(test_answer) count = count_trees(file.contents, 3, 1) file.test(count) # Part B test_answer = 336 # = 2 * 7 * 3 * 4 * 2 file = config.TestFile(test_answer) slopes = [ (1, 1), # (3, 1), # This slope is already calculated. # Rather than calculate the count again, just multiply results from # the other slopes onto the existing count. (5, 1), (7, 1), (1, 2), ] for slope in slopes: count *= count_trees(file.contents, *slope) file.test(count) # Part A file = config.File() count = count_trees(file.contents, 3, 1) config.log_part_info('A', count) for slope in slopes: count *= count_trees(file.contents, *slope) config.log_part_info('B', count)
def main() -> None: """Process boarding passes.""" # Part A only test_answer = [ (44, 5, 357), # FBFBBFFRLR (70, 7, 567), # BFFFBBFRRR (14, 7, 119), # FFFBBBFRRR (102, 4, 820) # BBFFBBFRLL ] file = config.TestFile(test_answer) tests = boarding_pass_to_data(file.contents) file.test(tests) file = config.File() result = boarding_pass_to_data(file.contents) config.log_part_info('A', get_highest_seat_id(result)) # Part B result = find_empty_seat_id(result) config.log_part_info('B', result)
def main() -> None: """Process port data.""" # Part A test_answer = 127 file = config.TestFile(test_answer, to_type=int) test = check_data_for_invalid(file.contents, preamble_size=5) file.test(test) # Part B file.answer = 62 test = get_range_sums_to_invalid(file.contents, test) test = min(test) + max(test) file.test(test) # Part A file = config.File(to_type=int) result = check_data_for_invalid(file.contents) config.log_part_info('A', result) # Part B result = get_range_sums_to_invalid(file.contents, result) result = min(result) + max(result) config.log_part_info('B', result)
def main() -> None: """Confirm the bus schedule.""" # Part A test_answer = 295 # bus 59 * 5 minutes file = config.TestFile(test_answer) test = find_soonest_bus(file.contents) file.test(test) # Part B # file.answer = 1068781 # test = find_contest_pattern(file.contents) # file.test(test) # Part A file = config.File() result = find_soonest_bus(file.contents) config.log_part_info('A', result) # Part B result = find_contest_pattern(file.contents) config.log_part_info('B', result)
def main() -> None: """Process game instructions.""" # Part A test_answer = 5 file = config.TestFile(test_answer) test = iterate_instructions_once(file.contents) file.test(test) file = config.File() result = iterate_instructions_once(file.contents) config.log_part_info('A', result) # Part B test_answer = 8 file = config.TestFile(test_answer) test = replace_bad_op(file.contents) file.test(test) file = config.File() result = replace_bad_op(file.contents) config.log_part_info('B', result)
def main() -> None: """Simulate the number game described in day 15.""" # Part A test_answer = 436 file = config.TestFile(test_answer) test = number_game(file.contents[0]) file.test(test) # Part B file.answer = 175594 test = number_game(file.contents[0], max_turns=30000000) file.test(test) # Part A file = config.File() result = number_game(file.contents[0]) config.log_part_info('A', result) # Part B result = number_game(file.contents[0], max_turns=30000000) config.log_part_info('B', result)
def main() -> None: """Check the number of valid passwords.""" # Part A test_answer = 2 # Number of valid test passwords file = config.TestFile(test_answer) valid = validate(file.contents, 'a') file.test(valid) # Part B test_answer = 1 # Number of valid test passwords file = config.TestFile(test_answer) valid = validate(file.contents, 'b') file.test(valid) # Part A file = config.File() valid = validate(file.contents, 'a') config.log_part_info('A', valid) # Part B valid = validate(file.contents, 'b') config.log_part_info('B', valid)