Procházet zdrojové kódy

Merge branch 'main' of noelle/adventofcode2021 into master

master
noelle před 3 roky
rodič
revize
c140835de6
8 změnil soubory, kde provedl 188 přidání a 2 odebrání
  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 Zobrazit soubor

@@ -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 Zobrazit soubor

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

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

+ 18
- 0
aoc1-1.py Zobrazit soubor

@@ -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 Zobrazit soubor

@@ -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 Zobrazit soubor

@@ -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 Zobrazit soubor

@@ -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 Zobrazit soubor

@@ -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 Zobrazit soubor

@@ -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()

Načítá se…
Zrušit
Uložit