with open('puzzle.txt', 'r') as f: strings = f.read().splitlines() nice_strings = 0 def second_method(even_pairs, odd_pairs): for index_even, even_pair in enumerate(even_pairs): for index_odd, odd_pair in enumerate(odd_pairs): if even_pair == odd_pair and index_odd != index_even and index_even != index_odd + 1: return True return False for string in strings: string_list = list(string) for character_idx in range(len(string_list) - 2): if string_list[character_idx] == string_list[character_idx + 2]: even_pairs = [] odd_pairs = [] for character_idx_b in range(len(string_list) - 1): if character_idx_b % 2 == 0: even_pairs.append(f'{string_list[character_idx_b]}{string_list[character_idx_b + 1]}') else: odd_pairs.append(f'{string_list[character_idx_b]}{string_list[character_idx_b + 1]}') if len(even_pairs) != len(set(even_pairs)) or len(odd_pairs) != len(set(odd_pairs)): nice_strings += 1 print(nice_strings, "First method") break else: if second_method(even_pairs, odd_pairs): nice_strings += 1 print(nice_strings, "Second method", string) break print(nice_strings)