Browse Source

Merge branch 'main' of noelle/adventofcode2021 into master

master
noelle 2 years ago
parent
commit
c140835de6
8 changed files with 188 additions and 2 deletions
  1. 1
    1
      LICENSE
  2. 1
    1
      README.md
  3. 18
    0
      aoc1-1.py
  4. 30
    0
      aoc1-2.py
  5. 27
    0
      aoc2-1.py
  6. 29
    0
      aoc2-2.py
  7. 30
    0
      aoc3-1.py
  8. 52
    0
      aoc3-2.py

+ 1
- 1
LICENSE View File

@@ -1,6 +1,6 @@
MIT License

Copyright (c) <year> <copyright holders>
Copyright (c) 2021 Noëlle Anthony

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

+ 1
- 1
README.md View File

@@ -1,3 +1,3 @@
# adventofcode2021

https://adventofcode.com
https://adventofcode.com

+ 18
- 0
aoc1-1.py View File

@@ -0,0 +1,18 @@
def main():
""" For each depth in the list, determine whether it's deeper than the previous depth.
There is no previous depth for the first entry.
Output the total number of times the depth increased.
"""
with open("aoc1-1.txt", "r") as file:
depths = file.readlines()
depths = [int(el.strip()) for el in depths]
prev = 999999999
increases = []
for depth in depths:
increases.append(1 if depth > prev else 0)
prev = depth
print(sum(increases))

if __name__ == "__main__":
main()

+ 30
- 0
aoc1-2.py View File

@@ -0,0 +1,30 @@
def main():
""" Consider three-depth windows instead of individual depths:
199 A
200 A B
208 A B C
210 B C D
200 E C D
207 E F D
240 E F G
269 F G H
260 G H
263 H
For each window in the list, determine whether it's deeper than the previous window.
There is no previous depth for the first entry.
Output the total number of times the depth increased.
"""
with open("aoc1-1.txt", "r") as file:
depths = file.readlines()
depths = [int(el.strip()) for el in depths]
prev = 999999999
increases = []
for i in range(len(depths)-2):
window = depths[i] + depths[i+1] + depths[i+2]
increases.append(1 if window > prev else 0)
prev = window
print(sum(increases))

if __name__ == "__main__":
main()

+ 27
- 0
aoc2-1.py View File

@@ -0,0 +1,27 @@
def main():
"""
horizontal position and vertical position both start at 0
forward X increases forward (horizontal) position by X units
down X increases depth (vertical position) by X units
up X decreases depth (vertical position) by X units
After following all instructions multiply final h_pos by final v_pos
"""
h_pos, v_pos = 0, 0
instructions = []
with open("aoc2-1.txt", "r") as file:
instructions = file.readlines()
for inst in instructions:
dir, amt = inst.strip().split(" ")
amt = int(amt)
if dir == "forward":
h_pos += amt
elif dir == "down":
v_pos += amt
elif dir == "up":
v_pos -= amt
else:
raise ValueError(f"Unrecognized direction: {h_pos}")
return (h_pos * v_pos)

if __name__ == "__main__":
print(main())

+ 29
- 0
aoc2-2.py View File

@@ -0,0 +1,29 @@
def main():
"""
horizontal position, vertical position, and aim both start at 0
forward X increases forward (horizontal) position by X units
AND changes depth by (X * aim) units
down X increases aim (vertical angle) by X units
up X decreases aim (vertical angle) by X units
After following all instructions multiply final h_pos by final v_pos
"""
h_pos, v_pos, aim = 0, 0, 0
instructions = []
with open("aoc2-1.txt", "r") as file:
instructions = file.readlines()
for inst in instructions:
dir, amt = inst.strip().split(" ")
amt = int(amt)
if dir == "forward":
h_pos += amt
v_pos += (amt * aim)
elif dir == "down":
aim += amt
elif dir == "up":
aim -= amt
else:
raise ValueError(f"Unrecognized direction: {h_pos}")
return (h_pos * v_pos)

if __name__ == "__main__":
print(main())

+ 30
- 0
aoc3-1.py View File

@@ -0,0 +1,30 @@
import sys

def main():
with open("aoc3-1.txt", "r") as file:
inputs = [el.strip() for el in file.readlines()]
digits = [[] for _ in range(len(inputs[0]))]
for j, ip in enumerate(inputs):
# print(digits, ip)
for i, dg in enumerate(ip):
# print(i, dg)
dg = dg.strip()
if dg != "":
digits[i].append(int(dg))
# if j >= 2:
# sys.exit(0)
gamma, epsilon = [], []
for el in digits:
gamma.append(1 if el.count(1) >= el.count(0) else 0)
epsilon.append(0 if el.count(1) >= el.count(0) else 1)
gamma_str = "".join([str(el) for el in gamma])
epsilon_str = "".join([str(el) for el in epsilon])
gamma_int = int(gamma_str, 2)
epsilon_int = int(epsilon_str, 2)
print(f"Gamma: {gamma_str} -- {gamma_int}")
print(f"Epsilon: {epsilon_str} -- {epsilon_int}")
print(f"Consumption: {gamma_int*epsilon_int}")

if __name__ == "__main__":
main()

+ 52
- 0
aoc3-2.py View File

@@ -0,0 +1,52 @@
def common_digit(list_of_lists: list, position: int, most=True) -> int:
digits = []
for ip in list_of_lists:
digits.append(int(ip[position]))
# print(f"1: {digits.count(1)}, 0: {digits.count(0)}", end="")
if not most:
return 0 if digits.count(1) >= digits.count(0) else 1
return 1 if digits.count(1) >= digits.count(0) else 0

def main() -> None:
with open("aoc3-1.txt", "r") as file:
inputs = [el.strip() for el in file.readlines()]
digits = [[] for _ in range(len(inputs[0]))]
for j, ip in enumerate(inputs):
for i, dg in enumerate(ip):
dg = dg.strip()
if dg != "":
digits[i].append(int(dg))
gamma, epsilon = [], []
for el in digits:
gamma.append(1 if el.count(1) >= el.count(0) else 0)
epsilon.append(0 if el.count(1) >= el.count(0) else 1)
gamma_str = "".join([str(el) for el in gamma])
epsilon_str = "".join([str(el) for el in epsilon])
gamma_int = int(gamma_str, 2)
epsilon_int = int(epsilon_str, 2)
print(f"Gamma: {gamma_str} -- {gamma_int}")
print(f"Epsilon: {epsilon_str} -- {epsilon_int}")
print(f"Consumption: {gamma_int*epsilon_int}")
oxy_inputs = [el for el in inputs]
co2_inputs = [el for el in inputs]
i = 0
while len(oxy_inputs) > 1:
mcd = common_digit(oxy_inputs, i)
oxy_inputs = [el for el in oxy_inputs if el[i] == str(mcd)]
# print(f", MCD: {mcd}, len: {len(oxy_inputs)}")
i += 1
i = 0
while len(co2_inputs) > 1:
lcd = common_digit(co2_inputs, i, False)
co2_inputs = [el for el in co2_inputs if el[i] == str(lcd)]
# print(f", LCD: {lcd}, len: {len(co2_inputs)}")
i += 1
oxy_str, co2_str = oxy_inputs[0], co2_inputs[0]
oxy_int, co2_int = int(oxy_str, 2), int(co2_str, 2)

print(f"Oxygen: {oxy_str} -- {oxy_int}")
print(f"CO2: {co2_str} -- {co2_int}")
print(f"Life support: {oxy_int*co2_int}")

if __name__ == "__main__":
main()

Loading…
Cancel
Save