d3
This commit is contained in:
parent
e2e1684886
commit
cda9d2d2ce
56
day03.py
Normal file
56
day03.py
Normal file
@ -0,0 +1,56 @@
|
||||
from tools.aoc import AOCDay
|
||||
from tools.coordinate import Coordinate
|
||||
from tools.grid import Grid
|
||||
from typing import Any
|
||||
|
||||
|
||||
def build_grid(max_num: int, p2: bool = False) -> (Grid, Coordinate, int):
|
||||
grid = Grid(0)
|
||||
grid.set(Coordinate(0, 0), 1)
|
||||
last_coord = Coordinate(0, 0)
|
||||
last_num = max_num
|
||||
dirs = [(-1, 0), (0, 1), (1, 0), (0, -1)]
|
||||
dir_index = 2
|
||||
cur_dir = dirs[dir_index]
|
||||
check_dir = dirs[dir_index + 1]
|
||||
|
||||
for x in range(2, max_num + 1):
|
||||
last_coord += Coordinate(*cur_dir)
|
||||
if not p2:
|
||||
grid.set(last_coord, x)
|
||||
else:
|
||||
sum = grid.getNeighbourSum(last_coord)
|
||||
grid.set(last_coord, sum)
|
||||
if sum > max_num:
|
||||
return grid, last_coord, sum
|
||||
if not grid.get(last_coord + Coordinate(*check_dir)):
|
||||
dir_index = (dir_index + 1) % 4
|
||||
cur_dir = dirs[dir_index]
|
||||
check_dir = dirs[(dir_index + 1) % 4]
|
||||
|
||||
return grid, last_coord, last_num
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(31, "input3_test"),
|
||||
(438, "input3")
|
||||
],
|
||||
[
|
||||
(266330, "input3")
|
||||
]
|
||||
]
|
||||
|
||||
def part1(self) -> Any:
|
||||
g, c, _ = build_grid(int(self.getInput()))
|
||||
return abs(c.x) + abs(c.y)
|
||||
|
||||
def part2(self) -> Any:
|
||||
g, c, i = build_grid(int(self.getInput()), True)
|
||||
return i
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2017, 3)
|
||||
day.run(verbose=True)
|
||||
1
inputs/input3
Normal file
1
inputs/input3
Normal file
@ -0,0 +1 @@
|
||||
265149
|
||||
1
inputs/input3_test
Normal file
1
inputs/input3_test
Normal file
@ -0,0 +1 @@
|
||||
1024
|
||||
Loading…
Reference in New Issue
Block a user