Solve 2016 days 6 to 8.

This commit is contained in:
felixm 2024-03-29 09:19:48 -04:00
parent fe016c9a2f
commit 440ae63b31
4 changed files with 154 additions and 0 deletions

25
2016/d6.py Normal file
View File

@ -0,0 +1,25 @@
from lib import *
data = open(0).read().strip()
second = True
p = ""
for row in zip(*data.splitlines()):
counts = {}
for l in LETTERS_LOWER:
counts[l] = row.count(l)
maxc = 0
minc = 999
c = ""
for l, count in counts.items():
if second:
if count > 0 and count < minc:
minc = count
c = l
else:
if count > maxc:
maxc = count
c = l
p += c
print(p)

72
2016/d7.py Normal file
View File

@ -0,0 +1,72 @@
from lib import *
data = open(0).read().strip()
first = False
def has_abba(xs):
for i in range(len(xs) - 3):
if xs[i] == xs[i + 3] and xs[i + 1] == xs[i + 2] and xs[i] != xs[i + 1]:
return True
return False
if first:
r = 0
for line in data.splitlines():
is_abba = False
xs = ""
for c in line:
if c == "[":
if has_abba(xs):
is_abba = True
xs = ""
elif c == "]":
if has_abba(xs):
is_abba = False
xs = ""
break
xs = ""
xs += c
if xs != "" and has_abba(xs):
is_abba = True
if is_abba:
r += 1
print(r)
else:
def abas(xs) -> set:
r = set()
for i in range(len(xs) - 2):
if not in_square and xs[i] == xs[i + 2] and xs[i] != xs[i + 1]:
r.add(xs[i:i+3])
return r
def babs(xs) -> set:
r = set()
for i in range(len(xs) - 2):
if not in_square and xs[i] == xs[i + 2] and xs[i] != xs[i + 1]:
r.add(xs[i + 1] + xs[i] + xs[i + 1])
return r
r = 0
for line in data.splitlines():
aba, bab = set(), set()
in_square = False
xs = ""
for c in line:
if c == "[":
aba |= abas(xs)
xs = ""
elif c == "]":
bab |= babs(xs)
xs = ""
else:
xs += c
if xs != "":
aba |= abas(xs)
if aba & bab:
r += 1
print(r)

53
2016/d8.py Normal file
View File

@ -0,0 +1,53 @@
from lib import *
data = open(0).read().strip()
cols = 50
rows = 6
pxs = []
def display(pxs):
for r in range(rows):
row = ""
for c in range(cols):
if (r, c) in pxs:
row += "#"
else:
row += "."
print(row)
print()
for line in data.splitlines():
if "rect" in line:
col, row = str_to_ints(line)
for r in range(row):
for c in range(col):
if r < rows and c < cols:
pxs.append((r, c))
elif "row" in line:
npxs = []
row, offset = str_to_ints(line)
for (r, c) in pxs:
if r == row:
nc = (c + offset) % cols
npxs.append((r, nc))
else:
npxs.append((r, c))
pxs = npxs
elif "column" in line:
npxs = []
col, offset = str_to_ints(line)
for (r, c) in pxs:
if c == col:
nr = (r + offset) % rows
npxs.append((nr, c))
else:
npxs.append((r, c))
pxs = npxs
else:
assert False
pxs = list(set(pxs))
print(len(pxs))
display(pxs) # EOARGPHYAO

View File

@ -38,3 +38,7 @@ written in Python.
- Day 3: 11:20 Ugly and slow.
- Day 4: 21:05 -__-
- Day 5: 29:35 -___-
- Day 6: 4:20 okay
- Day 7: 31:20 hmm
- Day 8: 14:50 meh
- Day 9: