Spaces:
Running
Running
| def solve(): | |
| keypad = ["789", "456", "123", " 0A"] | |
| keypad_map = {} | |
| for r in range(len(keypad)): | |
| for c in range(len(keypad[r])): | |
| keypad_map[keypad[r][c]] = (r, c) | |
| directional_keypad = [" ^A", "<v>", " ^A", "<v>"] | |
| directional_keypad_map = {} | |
| for r in range(len(directional_keypad)): | |
| for c in range(len(directional_keypad[r])): | |
| directional_keypad_map[directional_keypad[r][c]] = (r, c) | |
| def get_code(instructions, start_pos, keypad_layout, keypad_mapping): | |
| code = "" | |
| curr_pos = start_pos | |
| for instruction in instructions: | |
| next_pos = (curr_pos[0] + (1 if instruction == 'v' else (-1 if instruction == '^' else 0)), | |
| curr_pos[1] + (1 if instruction == '>' else (-1 if instruction == '<' else 0))) | |
| if 0 <= next_pos[0] < len(keypad_layout) and 0 <= next_pos[1] < len(keypad_layout[next_pos[0]]) and keypad_layout[next_pos[0]][next_pos[1]] != ' ': | |
| curr_pos = next_pos | |
| if instruction == 'A': | |
| code += keypad_layout[curr_pos[0]][curr_pos[1]] | |
| return code | |
| def part1(instructions_list): | |
| total_complexity = 0 | |
| for instructions in instructions_list: | |
| code = get_code(instructions, keypad_map['A'], keypad, keypad_map) | |
| complexity = len(instructions) * int(code[:-1] or "0") | |
| total_complexity += complexity | |
| return total_complexity | |
| def part2(instructions_list): | |
| total_complexity = 0 | |
| for instructions in instructions_list: | |
| intermediate_instructions = instructions | |
| for _ in range(25): | |
| intermediate_instructions = get_code(intermediate_instructions, directional_keypad_map['A'], directional_keypad, directional_keypad_map) | |
| code = get_code(intermediate_instructions, keypad_map['A'], keypad, keypad_map) | |
| complexity = len(instructions) * int(code[:-1] or "0") | |
| total_complexity += complexity | |
| return total_complexity | |
| with open("./input.txt") as f: | |
| instructions_list = [line.strip() for line in f] | |
| print(part1(instructions_list)) | |
| print(part2(instructions_list)) | |
| solve() |