Initial advent of code (2021 06,07,08)
This commit is contained in:
parent
ac3c96dbe3
commit
9f40c27eb9
5 changed files with 132 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
input.txt
|
||||||
|
example.txt
|
||||||
13
2021/06/day6.py
Normal file
13
2021/06/day6.py
Normal 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
23
2021/07/day7.py
Normal 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
20
2021/07/day7_initial.py
Normal 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
74
2021/08/day8.py
Normal 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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue