d5p2
This commit is contained in:
parent
db7295bcd9
commit
7617d7ae99
3 changed files with 59 additions and 0 deletions
43
d5/d5.go
43
d5/d5.go
|
@ -56,6 +56,41 @@ func generatePoints(segments []segment) []point {
|
||||||
return points
|
return points
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func generatePointsWithDiagonals(segments []segment) []point {
|
||||||
|
points := []point{}
|
||||||
|
|
||||||
|
for _, segment := range segments {
|
||||||
|
startX := segment.a.x
|
||||||
|
startY := segment.a.y
|
||||||
|
endX := segment.b.x
|
||||||
|
endY := segment.b.y
|
||||||
|
|
||||||
|
dx := 1
|
||||||
|
dy := 1
|
||||||
|
|
||||||
|
if segment.a.x == segment.b.x {
|
||||||
|
dx = 0
|
||||||
|
} else if segment.a.x > segment.b.x {
|
||||||
|
dx = -1
|
||||||
|
}
|
||||||
|
|
||||||
|
if segment.a.y == segment.b.y {
|
||||||
|
dy = 0
|
||||||
|
} else if segment.a.y > segment.b.y {
|
||||||
|
dy = -1
|
||||||
|
}
|
||||||
|
|
||||||
|
points = append(points, point{startX, startY})
|
||||||
|
for startX != endX || startY != endY {
|
||||||
|
startX += dx
|
||||||
|
startY += dy
|
||||||
|
points = append(points, point{startX, startY})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return points
|
||||||
|
}
|
||||||
|
|
||||||
func findIntersections(points []point) map[point]int {
|
func findIntersections(points []point) map[point]int {
|
||||||
|
|
||||||
intersections := map[point]int{}
|
intersections := map[point]int{}
|
||||||
|
@ -86,3 +121,11 @@ func D5(input string) int {
|
||||||
intersections := findIntersections(points)
|
intersections := findIntersections(points)
|
||||||
return countIntersections(intersections)
|
return countIntersections(intersections)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func D5P2(input string) int {
|
||||||
|
lines := strings.Split(strings.TrimSpace(input), "\n")
|
||||||
|
segments := createSegments(lines)
|
||||||
|
points := generatePointsWithDiagonals(segments)
|
||||||
|
intersections := findIntersections(points)
|
||||||
|
return countIntersections(intersections)
|
||||||
|
}
|
||||||
|
|
|
@ -20,3 +20,18 @@ func TestD5(t *testing.T) {
|
||||||
|
|
||||||
assert.EqualValues(t, 5, D5(input))
|
assert.EqualValues(t, 5, D5(input))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestD5P2(t *testing.T) {
|
||||||
|
input := `0,9 -> 5,9
|
||||||
|
8,0 -> 0,8
|
||||||
|
9,4 -> 3,4
|
||||||
|
2,2 -> 2,1
|
||||||
|
7,0 -> 7,4
|
||||||
|
6,4 -> 2,0
|
||||||
|
0,9 -> 2,9
|
||||||
|
3,4 -> 1,4
|
||||||
|
0,0 -> 8,8
|
||||||
|
5,5 -> 8,2`
|
||||||
|
|
||||||
|
assert.EqualValues(t, 12, D5P2(input))
|
||||||
|
}
|
||||||
|
|
1
main.go
1
main.go
|
@ -33,4 +33,5 @@ func main() {
|
||||||
fmt.Printf("day 4: %v\n", d4.D4(client.Day(4)))
|
fmt.Printf("day 4: %v\n", d4.D4(client.Day(4)))
|
||||||
fmt.Printf("day 4 part 2: %v\n", d4.D4P2(client.Day(4)))
|
fmt.Printf("day 4 part 2: %v\n", d4.D4P2(client.Day(4)))
|
||||||
fmt.Printf("day 5: %v\n", d5.D5(client.Day(5)))
|
fmt.Printf("day 5: %v\n", d5.D5(client.Day(5)))
|
||||||
|
fmt.Printf("day 5 part 2: %v\n", d5.D5P2(client.Day(5)))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue