Update 2015 solutions

This commit is contained in:
2024-10-20 15:19:25 -04:00
parent 87ab42743e
commit e73fa3bae7
16 changed files with 362 additions and 411 deletions

View File

@@ -1,53 +1,56 @@
from lib import *
from lib import get_data
data = open(0).read()
data = get_data(__file__)
part_1 = True
if part_1:
res = 0
for line in data.splitlines():
vc = 0
for c in line:
if c in "aoeui":
vc += 1
if vc < 3:
continue
prev = None
for c in line:
if c == prev:
break
prev = c
else:
continue
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
contains = False
ss = ["ab", "cd", "pq", "xy"]
for s in ss:
if s in line:
contains = True
# 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
if contains:
continue
res += 1
print(res)
else:
res = 0
for line in data.splitlines():
pairs = {}
for i in range(0, len(line) - 1):
p = line[i:i+2]
if p in pairs and i > pairs[p] + 1:
break
if not p in pairs:
pairs[p] = i
else:
continue
# 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
for i in range(0, len(line) - 2):
if line[i] == line[i + 2]:
break
else:
continue
res += 1
print(res)
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)