From bb5764bd1488a2ed4e4256c57c72f595337e7255 Mon Sep 17 00:00:00 2001 From: Kharec Date: Mon, 22 Dec 2025 10:55:56 +0100 Subject: [PATCH] feat: solve part two --- internal/2017/DayThree/code.go | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) 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++ + } }