from collections import Counter def extract_connections_grid(message): message_content = message.strip() if message_content.startswith("Connections") and "Puzzle #" in message_content: # Extract the puzzle number puzzle_number_start = message_content.find("Puzzle #") + len("Puzzle #") puzzle_number_end = message_content.find("\n", puzzle_number_start) puzzle_number = message_content[puzzle_number_start:puzzle_number_end].strip() # Extract the grid (assume the grid starts after the first two lines) grid_start = message_content.find("\n", message_content.find("Puzzle #")) + 1 grid_content = message_content[grid_start:].strip() # Split the grid into lines color_grid = grid_content.split("\n") return color_grid else: return False def check_connections_win(color_grid): """ Check if the Connections game is a win and return the number of guesses. A win is when there are exactly 4 groups of 4 colors each. """ # Flatten the color grid into a list of colors uniform_rows = [row for row in color_grid if len(set(row)) == 1] flattened_grid = ''.join(uniform_rows) # Count the occurrences of each color in the grid color_counts = Counter(flattened_grid) # Check if there are exactly 4 different colors with 4 squares each if len(color_counts) == 4 and all(count == 4 for count in color_counts.values()): # A win: return the number of guesses (lines in the grid) return len(color_grid) return 0 # Not a win def is_perfect_game(color_grid): """ Check if the Connections game is a perfect game (solved in 4 guesses, no mistakes). """ # A perfect game is one where the first 4 lines form perfect groups if len(color_grid) == 4 and all(len(set(line)) == 1 for line in color_grid): return True # It's a perfect game return False