diff --git a/internal/2017/DayThree/code.go b/internal/2017/DayThree/code.go index 7b651e1..0d308d3 100644 --- a/internal/2017/DayThree/code.go +++ b/internal/2017/DayThree/code.go @@ -46,5 +46,36 @@ func PartOne(data int) int { } func PartTwo(data int) int { - return 0 + grid := make(map[[2]int]int) + grid[[2]int{0, 0}] = 1 + + directions := [4][2]int{{1, 0}, {0, 1}, {-1, 0}, {0, -1}} + x, y := 1, 0 + directionIdx := 0 + sideLength := 1 + stepsInSide := 1 + + for { + sum := grid[[2]int{x - 1, y - 1}] + grid[[2]int{x - 1, y}] + grid[[2]int{x - 1, y + 1}] + + grid[[2]int{x, y - 1}] + grid[[2]int{x, y + 1}] + + grid[[2]int{x + 1, y - 1}] + grid[[2]int{x + 1, y}] + grid[[2]int{x + 1, y + 1}] + + if sum > data { + return sum + } + + grid[[2]int{x, y}] = sum + + if stepsInSide == sideLength { + stepsInSide = 0 + if directionIdx%2 == 1 { + sideLength++ + } + directionIdx = (directionIdx + 1) % 4 + } + + x += directions[directionIdx][0] + y += directions[directionIdx][1] + stepsInSide++ + } }