d12p1; p2 ... well, I hate Eric.
This commit is contained in:
parent
426b3ef609
commit
f4a79d5e07
4
day03.py
4
day03.py
@ -1,5 +1,5 @@
|
|||||||
from aoc import AOCDay
|
from aoc import AOCDay
|
||||||
from coordinate import Coordinate
|
from coordinate import Coordinate, DistanceAlgorithm
|
||||||
from math import inf
|
from math import inf
|
||||||
from typing import Any, Dict, List
|
from typing import Any, Dict, List
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ class Day(AOCDay):
|
|||||||
if x not in s[1]:
|
if x not in s[1]:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
mDist = Coordinate(*x).getDistanceTo(Coordinate(0, 0), mode=0)
|
mDist = Coordinate(*x).getDistanceTo(Coordinate(0, 0), mode=DistanceAlgorithm.MANHATTAN)
|
||||||
if mDist < minDist:
|
if mDist < minDist:
|
||||||
minDist = mDist
|
minDist = mDist
|
||||||
|
|
||||||
|
|||||||
4
day04.py
4
day04.py
@ -7,7 +7,7 @@ class Day(AOCDay):
|
|||||||
test_solutions_p2 = []
|
test_solutions_p2 = []
|
||||||
|
|
||||||
def part1(self) -> Any:
|
def part1(self) -> Any:
|
||||||
low, hi = map(int, self.input[0].split("-"))
|
low, hi = self.getInputAsArraySplit("-", int)
|
||||||
count = 0
|
count = 0
|
||||||
for x in range(low, hi + 1):
|
for x in range(low, hi + 1):
|
||||||
d0 = x // 100_000
|
d0 = x // 100_000
|
||||||
@ -24,7 +24,7 @@ class Day(AOCDay):
|
|||||||
return count
|
return count
|
||||||
|
|
||||||
def part2(self) -> Any:
|
def part2(self) -> Any:
|
||||||
low, hi = map(int, self.input[0].split("-"))
|
low, hi = self.getInputAsArraySplit("-", int)
|
||||||
count = 0
|
count = 0
|
||||||
for x in range(low, hi + 1):
|
for x in range(low, hi + 1):
|
||||||
d0 = x // 100_000
|
d0 = x // 100_000
|
||||||
|
|||||||
4
day08.py
4
day08.py
@ -7,7 +7,7 @@ class Day(AOCDay):
|
|||||||
test_solutions_p2 = []
|
test_solutions_p2 = []
|
||||||
|
|
||||||
def part1(self) -> Any:
|
def part1(self) -> Any:
|
||||||
img_string = self.input[0]
|
img_string = self.getInput()
|
||||||
img_width = 25
|
img_width = 25
|
||||||
img_height = 6
|
img_height = 6
|
||||||
layers = []
|
layers = []
|
||||||
@ -35,7 +35,7 @@ class Day(AOCDay):
|
|||||||
return one_count * two_count
|
return one_count * two_count
|
||||||
|
|
||||||
def part2(self) -> Any:
|
def part2(self) -> Any:
|
||||||
img_string = self.input[0]
|
img_string = self.getInput()
|
||||||
img_width = 25
|
img_width = 25
|
||||||
img_height = 6
|
img_height = 6
|
||||||
layers = []
|
layers = []
|
||||||
|
|||||||
4
day10.py
4
day10.py
@ -37,7 +37,7 @@ class Day(AOCDay):
|
|||||||
|
|
||||||
def part1(self) -> Any:
|
def part1(self) -> Any:
|
||||||
grid = Grid()
|
grid = Grid()
|
||||||
for y, l in enumerate(self.input):
|
for y, l in enumerate(self.getInput()):
|
||||||
for x, c in enumerate(l):
|
for x, c in enumerate(l):
|
||||||
grid.set(Coordinate(x, y), c == '#')
|
grid.set(Coordinate(x, y), c == '#')
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ class Day(AOCDay):
|
|||||||
|
|
||||||
def part2(self) -> Any:
|
def part2(self) -> Any:
|
||||||
grid = Grid()
|
grid = Grid()
|
||||||
for y, l in enumerate(self.input):
|
for y, l in enumerate(self.getInput()):
|
||||||
for x, c in enumerate(l):
|
for x, c in enumerate(l):
|
||||||
grid.set(Coordinate(x, y), c == '#')
|
grid.set(Coordinate(x, y), c == '#')
|
||||||
|
|
||||||
|
|||||||
74
day12.py
Normal file
74
day12.py
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
from aoc import AOCDay
|
||||||
|
from math import lcm
|
||||||
|
from re import compile, findall
|
||||||
|
from tools import compare
|
||||||
|
from typing import Any, List
|
||||||
|
|
||||||
|
scanline_regex = compile(r"^<x=(.*), y=(.*), z=(.*)>$")
|
||||||
|
|
||||||
|
|
||||||
|
class Moon:
|
||||||
|
x: int
|
||||||
|
y: int
|
||||||
|
z: int
|
||||||
|
vel_x: int = 0
|
||||||
|
vel_y: int = 0
|
||||||
|
vel_z: int = 0
|
||||||
|
|
||||||
|
def __init__(self, x: int, y: int, z: int):
|
||||||
|
self.x = x
|
||||||
|
self.y = y
|
||||||
|
self.z = z
|
||||||
|
|
||||||
|
def getEnergy(self):
|
||||||
|
potential = abs(self.x) + abs(self.y) + abs(self.z)
|
||||||
|
kinetic = abs(self.vel_x) + abs(self.vel_y) + abs(self.vel_z)
|
||||||
|
return potential * kinetic
|
||||||
|
|
||||||
|
|
||||||
|
def moveMoons(moons: List[Moon]):
|
||||||
|
for i, moon in enumerate(moons):
|
||||||
|
for t in range(len(moons)):
|
||||||
|
if i == t:
|
||||||
|
continue
|
||||||
|
|
||||||
|
moon.vel_x += compare(moon.x, moons[t].x)
|
||||||
|
moon.vel_y += compare(moon.y, moons[t].y)
|
||||||
|
moon.vel_z += compare(moon.z, moons[t].z)
|
||||||
|
|
||||||
|
for moon in moons:
|
||||||
|
moon.x += moon.vel_x
|
||||||
|
moon.y += moon.vel_y
|
||||||
|
moon.z += moon.vel_z
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
test_solutions_p1 = [183, 14645]
|
||||||
|
test_solutions_p2 = [2772, 4686774924]
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
moons = [Moon(*map(int, findall(scanline_regex, line)[0])) for line in self.getInput()]
|
||||||
|
|
||||||
|
for step in range(1000):
|
||||||
|
moveMoons(moons)
|
||||||
|
|
||||||
|
return sum([x.getEnergy() for x in moons])
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
moons = [Moon(*map(int, findall(scanline_regex, line)[0])) for line in self.getInput()]
|
||||||
|
|
||||||
|
init_moons = moons.copy()
|
||||||
|
vel_0_pos = [0, 0, 0, 0]
|
||||||
|
moveCounter = 0
|
||||||
|
#while 0 in vel_0_pos:
|
||||||
|
for bla in range(3000):
|
||||||
|
moveCounter += 1
|
||||||
|
moveMoons(moons)
|
||||||
|
for i, m in enumerate(moons):
|
||||||
|
if m.x == init_moons[i].x and m.y == init_moons[i].y and m.z == init_moons[i].z and m.vel_x == 0 and m.vel_y == 0 and m.vel_z == 0:
|
||||||
|
print(i, moveCounter)
|
||||||
|
if (vel_0_pos[i] == 0 or vel_0_pos[i] > moveCounter - vel_0_pos[i]) and m.vel_x == 0 and m.vel_y == 0 and m.vel_z == 0:
|
||||||
|
vel_0_pos[i] = moveCounter - vel_0_pos[i]
|
||||||
|
|
||||||
|
print(vel_0_pos)
|
||||||
|
return lcm(*vel_0_pos)
|
||||||
4
inputs/input12
Normal file
4
inputs/input12
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<x=-9, y=-1, z=-1>
|
||||||
|
<x=2, y=9, z=5>
|
||||||
|
<x=10, y=18, z=-12>
|
||||||
|
<x=-6, y=15, z=-7>
|
||||||
4
inputs/test_input12_1_0
Normal file
4
inputs/test_input12_1_0
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<x=-1, y=0, z=2>
|
||||||
|
<x=2, y=-10, z=-7>
|
||||||
|
<x=4, y=-8, z=8>
|
||||||
|
<x=3, y=5, z=-1>
|
||||||
4
inputs/test_input12_1_1
Normal file
4
inputs/test_input12_1_1
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<x=-8, y=-10, z=0>
|
||||||
|
<x=5, y=5, z=10>
|
||||||
|
<x=2, y=-7, z=3>
|
||||||
|
<x=9, y=-8, z=-3>
|
||||||
4
inputs/test_input12_2_0
Normal file
4
inputs/test_input12_2_0
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<x=-1, y=0, z=2>
|
||||||
|
<x=2, y=-10, z=-7>
|
||||||
|
<x=4, y=-8, z=8>
|
||||||
|
<x=3, y=5, z=-1>
|
||||||
4
inputs/test_input12_2_1
Normal file
4
inputs/test_input12_2_1
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<x=-8, y=-10, z=0>
|
||||||
|
<x=5, y=5, z=10>
|
||||||
|
<x=2, y=-7, z=3>
|
||||||
|
<x=9, y=-8, z=-3>
|
||||||
Loading…
Reference in New Issue
Block a user