62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
|
)
|
|
|
|
func main() {
|
|
inp := h.StdinToStringSlice()
|
|
scanners := parseScanners(inp)
|
|
part1(scanners)
|
|
}
|
|
|
|
func part1(scanners []scanner) {
|
|
foundBeacons := scanners[0].beacons
|
|
foundScannerPositions := []beacon{{0, 0, 0}}
|
|
|
|
remaining := scanners[1:]
|
|
for len(remaining) > 0 {
|
|
fmt.Println(len(remaining), "Remaining")
|
|
var wrk scanner
|
|
wrk, remaining = remaining[0], remaining[1:]
|
|
s, err := NewScanner(foundBeacons).getTransformedIfOverlap(wrk)
|
|
if err != nil {
|
|
remaining = append(remaining, wrk)
|
|
} else {
|
|
foundBeacons = append(foundBeacons, s.beacons...)
|
|
foundScannerPositions = append(foundScannerPositions, s.position)
|
|
}
|
|
fmt.Println(" ", foundBeacons)
|
|
}
|
|
fmt.Println("# Part 1")
|
|
fmt.Println(len(foundScannerPositions))
|
|
}
|
|
|
|
func parseScanners(inp []string) []scanner {
|
|
var scanners []scanner
|
|
for i := range inp {
|
|
if strings.HasPrefix(inp[i], "---") {
|
|
// Find the next empty line
|
|
end := i
|
|
for ; end < len(inp); end++ {
|
|
if inp[end] == "" {
|
|
break
|
|
}
|
|
}
|
|
// a new scanner
|
|
wrk, err := NewScannerFromInput(inp[i:end])
|
|
if err == nil {
|
|
scanners = append(scanners, wrk)
|
|
} else {
|
|
fmt.Println("Error parsing scanners")
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
}
|
|
return scanners
|
|
}
|