if monster_char == "#": grid[row + monster_index] = grid[ row + monster_index][:match_index + monster_char_index] + "O" + grid[ row + monster_index][ match_index + monster_char_index + 1:] roughness = sum([row.count("#") for row in grid]) return sea_monster_count != 0, roughness def print_grid(grid): colorama.init() for row in grid: for char in row: if char == "#": print(colorama.Fore.BLUE, end='') elif char == ".": print(colorama.Fore.CYAN, end='') elif char == "O": print(colorama.Fore.YELLOW, end='') else: assert False print(char + colorama.Style.RESET_ALL, end='') print() aoc.run_raw(main, "day20.txt")
def main(puzzle_input): values = [int(val) for val in puzzle_input] pattern_matrix = numpy.array(get_pattern_matrix(len(values))) values = numpy.array(values) for _ in range(100): values = numpy.matmul(pattern_matrix, values) values = [abs(r) % 10 for r in values] part1 = "".join(map(str, values[:8])) values = puzzle_input values *= 10000 offset = int(values[:7]) values = values[offset:] values = [int(val) for val in values] for _ in range(100): s = sum(values) for i in range(len(values)): v = s % 10 s -= values[i] values[i] = v part2 = "".join(map(str, values[:8])) return part1, part2 aoc.run_raw(main, "day16.txt")
part1 += 1 if has_same(password, True): part2 += 1 index = 5 numbers[index] += 1 while numbers[index] == 10: numbers[index] = 0 numbers[index - 1] += 1 index -= 1 for i in range(index, 6): numbers[i] = max(numbers[i], numbers[i - 1]) password = int(''.join([str(n) for n in numbers])) return part1, part2 def has_same(password, part2=False): passwordString = str(password) for i in range(5): if passwordString[i] == passwordString[i + 1]: if part2 == False: return True elif (i == 0 or passwordString[i] != passwordString[i - 1]) and ( i == 4 or passwordString[i] != passwordString[i + 2]): return True return False aoc.run_raw(main, "day04.txt")