from lib import get_data data = get_data(__file__) def is_nice(line): # It contains at least three vowels (aeiou only), like aei, xazegov, or aeiouaeiouaeiou. vc = 0 for v in "aeiou": vc += line.count(v) if vc < 3: return False # It contains at least one letter that appears twice in a row, like xx, # abcdde (dd), or aabbccdd (aa, bb, cc, or dd). for i in range(len(line) - 1): if line[i] == line[i + 1]: break else: return False # It does not contain the strings ab, cd, pq, or xy, even if they are # part of one of the other requirements. for i in range(len(line) - 1): cc = "".join(line[i : i + 2]) if cc in ["ab", "cd", "pq", "xy"]: return False return True def is_nice_2(line): good = False for i in range(len(line) - 1): cc = "".join(line[i : i + 2]) for j in range(i + 2, len(line) - 1): dd = "".join(line[j : j + 2]) if cc == dd: good = True if not good: return False for i in range(len(line) - 2): cc = "".join(line[i : i + 3]) if cc[0] == cc[2]: break else: return False return True t = sum(1 if is_nice(line) else 0 for line in data.splitlines()) print(t) t = sum(1 if is_nice_2(line) else 0 for line in data.splitlines()) print(t)