day11 (unfinished)
This commit is contained in:
parent
7074c08023
commit
e8b37bdddb
@ -93,5 +93,15 @@
|
|||||||
"wrong": [],
|
"wrong": [],
|
||||||
"correct": 3333662986
|
"correct": 3333662986
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"1": {
|
||||||
|
"wrong": [],
|
||||||
|
"correct": "243,34"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"wrong": [],
|
||||||
|
"correct": "90,214,15"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
77
day11.py
Normal file
77
day11.py
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
from tools.aoc import AOCDay
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
PRIMES = [2, 3, 5, 7, 11, 13, 17]
|
||||||
|
|
||||||
|
|
||||||
|
def get_max_power_point(power_grid: list[list[int]], window_size: int = 3) -> (int, int, int):
|
||||||
|
max_power_level = 0
|
||||||
|
ret = (0, 0, 0)
|
||||||
|
|
||||||
|
for y in range(300 - window_size):
|
||||||
|
for x in range(300 - window_size):
|
||||||
|
sub_power_level = sum(
|
||||||
|
sum(power_grid[z][x:x+window_size])
|
||||||
|
for z in range(y, y + window_size)
|
||||||
|
)
|
||||||
|
if sub_power_level > max_power_level:
|
||||||
|
max_power_level = sub_power_level
|
||||||
|
ret = (x, y, max_power_level)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
("33,45", "input11_test"),
|
||||||
|
("21,61", "input11_test2"),
|
||||||
|
("243,34", "input11"),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
("90,269,16", "input11_test"),
|
||||||
|
("232,251,12", "input11_test2"),
|
||||||
|
("90,214,15", "input11"),
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_power_grid(self) -> list[list[int]]:
|
||||||
|
serial = self.getInput(return_type=int)
|
||||||
|
grid = []
|
||||||
|
for y in range(300):
|
||||||
|
sub_grid = []
|
||||||
|
for x in range(300):
|
||||||
|
rack_id = x + 10
|
||||||
|
power_level = rack_id * y
|
||||||
|
power_level += serial
|
||||||
|
power_level *= rack_id
|
||||||
|
power_level = (power_level // 100) % 10
|
||||||
|
power_level -= 5
|
||||||
|
sub_grid.append(power_level)
|
||||||
|
grid.append(sub_grid)
|
||||||
|
|
||||||
|
return grid
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
power_grid = self.get_power_grid()
|
||||||
|
return "%s,%s" % get_max_power_point(power_grid)[:-1]
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
power_grid = self.get_power_grid()
|
||||||
|
max_power_level = 0
|
||||||
|
max_power_ret = (0, 0, 0)
|
||||||
|
for i in range(2, 301):
|
||||||
|
(x, y, max_power) = get_max_power_point(power_grid, i)
|
||||||
|
if (x, y, max_power) == (0, 0, 0):
|
||||||
|
break
|
||||||
|
if max_power > max_power_level:
|
||||||
|
max_power_level = max_power
|
||||||
|
max_power_ret = (x, y, i)
|
||||||
|
|
||||||
|
return "%s,%s,%s" % max_power_ret
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
day = Day(2018, 11)
|
||||||
|
day.run(verbose=True)
|
||||||
1
inputs/input11
Normal file
1
inputs/input11
Normal file
@ -0,0 +1 @@
|
|||||||
|
1718
|
||||||
1
inputs/input11_test
Normal file
1
inputs/input11_test
Normal file
@ -0,0 +1 @@
|
|||||||
|
18
|
||||||
1
inputs/input11_test2
Normal file
1
inputs/input11_test2
Normal file
@ -0,0 +1 @@
|
|||||||
|
42
|
||||||
Loading…
Reference in New Issue
Block a user