57 lines
1.4 KiB
Python
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)
|