Solutions for day 10.

This commit is contained in:
2018-12-12 15:06:32 -05:00
parent e47b6c4a45
commit 28998c5d14
4 changed files with 67 additions and 18 deletions

View File

@ -1,5 +1,11 @@
// Unused solution: yes, this is a SECOND failed solution. Left here as a testament
// to... something. The actual solution uses CalculateRange from point.go
package day10
import (
"sort"
)
// GroupPoints creates groups of points, then sorts them and returns the sorted list
// A 'group' is a series of points that are adjacent to each other.
// If this function finds any non-adjacent points, it returns nil.
@ -36,7 +42,12 @@ func GroupPoints(points []*Point) [][]*Point {
groups = append(groups, group)
}
// TODO: sort the groups
// sort the groups
sort.Slice(groups[:], func(i, j int) bool {
xMin1, _, _, _ := findBounds(groups[i])
xMin2, _, _, _ := findBounds(groups[j])
return xMin1 < xMin2
})
return groups
}

View File

@ -14,6 +14,16 @@ func (p *Point) Move() {
p.Y += p.Yv
}
func (p *Point) Reverse() {
p.X -= p.Xv
p.Y -= p.Yv
}
func CalculateRange(points []*Point) int {
xMin, xMax, yMin, yMax := findBounds(points)
return xMax - xMin + yMax - yMin
}
func DrawPoints(points []*Point) {
pointArr := makeBuffer(points)
@ -33,7 +43,11 @@ func DrawPoints(points []*Point) {
// findBounds returns xMin, xMax, yMin, and yMax from the provided points.
func findBounds(points []*Point) (int, int, int, int) {
// find min and max values
var xMin, xMax, yMin, yMax int
xMin := points[0].X
xMax := points[0].X
yMin := points[0].Y
yMax := points[0].Y
for _, point := range points {
if point.X < xMin {
xMin = point.X
@ -54,6 +68,7 @@ func findBounds(points []*Point) (int, int, int, int) {
func makeBuffer(points []*Point) [][]byte {
xMin, xMax, yMin, yMax := findBounds(points)
// get the total magnitude; we'll do adjustments later
xRange := xMax - xMin
yRange := yMax - yMin