adventofcode/2021/day19/main.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
}