Kaynağa Gözat

Merge branch 'main' of noelle/adventofcode2021 into master

master
noelle 3 yıl önce
ebeveyn
işleme
c140835de6
8 değiştirilmiş dosya ile 188 ekleme ve 2 silme
  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 Dosyayı Görüntüle

@@ -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 Dosyayı Görüntüle

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

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

+ 18
- 0
aoc1-1.py Dosyayı Görüntüle

@@ -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 Dosyayı Görüntüle

@@ -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 Dosyayı Görüntüle

@@ -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 Dosyayı Görüntüle

@@ -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 Dosyayı Görüntüle

@@ -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 Dosyayı Görüntüle

@@ -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…
İptal
Kaydet