Files
aocpy/2015/d5.py
2024-10-20 15:19:25 -04:00

57 lines
1.4 KiB
Python

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)