From 9f40c27eb9a44acc32267d6c585c90deb4e468a8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 8 Dec 2021 15:29:52 -0800 Subject: [PATCH] Initial advent of code (2021 06,07,08) --- .gitignore | 2 ++ 2021/06/day6.py | 13 ++++++++ 2021/07/day7.py | 23 +++++++++++++ 2021/07/day7_initial.py | 20 +++++++++++ 2021/08/day8.py | 74 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 132 insertions(+) create mode 100644 .gitignore create mode 100644 2021/06/day6.py create mode 100644 2021/07/day7.py create mode 100644 2021/07/day7_initial.py create mode 100644 2021/08/day8.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..18479cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +input.txt +example.txt diff --git a/2021/06/day6.py b/2021/06/day6.py new file mode 100644 index 0000000..c95a2b7 --- /dev/null +++ b/2021/06/day6.py @@ -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)) diff --git a/2021/07/day7.py b/2021/07/day7.py new file mode 100644 index 0000000..63f741a --- /dev/null +++ b/2021/07/day7.py @@ -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)) diff --git a/2021/07/day7_initial.py b/2021/07/day7_initial.py new file mode 100644 index 0000000..055cd19 --- /dev/null +++ b/2021/07/day7_initial.py @@ -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) diff --git a/2021/08/day8.py b/2021/08/day8.py new file mode 100644 index 0000000..74dd9eb --- /dev/null +++ b/2021/08/day8.py @@ -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)