Initial advent of code (2021 06,07,08)

This commit is contained in:
Julia Lange 2021-12-08 15:29:52 -08:00
parent ac3c96dbe3
commit 9f40c27eb9
Signed by: Julia
SSH key fingerprint: SHA256:KI8YxpkPRbnDRkXPgCuQCVz181++Vy7NAvmQj8alOhM
5 changed files with 132 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
input.txt
example.txt

13
2021/06/day6.py Normal file
View file

@ -0,0 +1,13 @@
with open("input.txt", 'r') as f:
data = f.readlines()
data = list(map(int, data[0].strip().split(",")))
fish = [data.count(i) for i in range(9)]
for i in range(256):
num = fish.pop(0)
fish[6] += num
fish.append(num)
print(sum(fish))

23
2021/07/day7.py Normal file
View file

@ -0,0 +1,23 @@
import statistics
with open("input.txt", 'r') as f:
data = f.readlines()
data = list(map(int, data[0].strip().split(",")))
# Part 1
median = statistics.median(data)
fuelCost = 0
for crab in data:
fuelCost += abs(median - crab)
print(fuelCost)
# Part 2
flist = []
# Definitely a better way than checking all of these
for pos in range(0, max(data)+1):
fuel = 0
for crab in data:
fuel += (abs(pos - crab)*(abs(pos - crab)+1))/2
flist.append(fuel)
print(min(flist))

20
2021/07/day7_initial.py Normal file
View file

@ -0,0 +1,20 @@
with open("input.txt", 'r') as f:
data = f.readlines()
data = list(map(int, data[0].strip().split(",")))
def crabMove(crab, pos):
difference = abs(pos - crab)
# return difference
return (difference*(difference+1))/2
bestPos = 0
bestFuel = 1000000000
for i in range(min(data), max(data)):
fuelCost = 0
for crab in data:
fuelCost += crabMove(crab, i)
if fuelCost < bestFuel:
bestFuel = fuelCost
bestPos = i
print(bestFuel)

74
2021/08/day8.py Normal file
View file

@ -0,0 +1,74 @@
input = open("input.txt", 'r')
data = []
for line in input:
data.append(list(line.strip().split(" ")))
letters = [set() for i in range(0, 10)]
dataset = ['a','b','c','d','e','f','g']
total = 0
for line in data:
letters = [set() for i in range(0, 10)]
for i in range(0, 10):
entry = line[i]
if len(entry) == 2:
letters[1] = set([frozenset(entry)])
elif len(entry) == 3:
letters[7] = set([frozenset(entry)])
elif len(entry) == 4:
letters[4] = set([frozenset(entry)])
elif len(entry) == 5:
letters[2].update(set([frozenset(entry)]))
letters[3].update(set([frozenset(entry)]))
letters[5].update(set([frozenset(entry)]))
elif len(entry) == 6:
letters[0].update(set([frozenset(entry)]))
letters[6].update(set([frozenset(entry)]))
letters[9].update(set([frozenset(entry)]))
elif len(entry) == 7:
letters[8] = set([frozenset(entry)])
cf = letters[1].pop()
letters[1].add(cf)
for st in letters[3]:
if st.intersection(cf) == cf:
letters[3] = set([st])
letters[2].remove(st)
letters[5].remove(st)
acf = letters[7].pop()
letters[7].add(acf)
for st in letters[6]:
if st.intersection(acf) != acf:
letters[6] = set([st])
letters[0].remove(st)
letters[9].remove(st)
abdefg = letters[6].pop()
letters[6].add(abdefg)
c = frozenset(dataset).difference(abdefg)
for st in letters[2]:
if st.intersection(c) == c:
letters[2] = set([st])
letters[5].remove(st)
bcdf = letters[4].pop()
letters[4].add(bcdf)
for st in letters[9]:
if st.intersection(bcdf) == bcdf:
letters[9] = set([st])
letters[0].remove(st)
num = ''
for i in range(11, 15):
entry = frozenset(line[i])
j = 0
for decoder in letters:
popStorage = decoder.pop()
decoder.add(popStorage)
if popStorage == entry:
num += chr(j+48)
j += 1
total += int(num)
print(total)