This commit is contained in:
Karl Spickermann 2021-12-20 02:04:00 +01:00
parent 7370367223
commit 602d4f9475

View File

@ -28,33 +28,33 @@ func main() {
scanners[len(scanners)-1].points = append(scanners[len(scanners)-1].points, [3]int{tmpPoint[0], tmpPoint[1], tmpPoint[2]}) scanners[len(scanners)-1].points = append(scanners[len(scanners)-1].points, [3]int{tmpPoint[0], tmpPoint[1], tmpPoint[2]})
} }
} }
//hitScanners := []int{0} hitScanners := []int{0}
//run := true run := true
//for run { for run {
// run = runUntilFirstHit(&scanners, &hitScanners) run = runUntilFirstHit(&scanners, &hitScanners)
//} }
runFor(&scanners, 0, 1)
runFor(&scanners, 0, 4)
runFor(&scanners, 0, 2)
runFor(&scanners, 0, 3)
fmt.Println(len(scanners[0].points))
//inputTestResult, _ := helper.GetInput("day19TestResultPoints.txt") inputTestResult, _ := helper.GetInput("day19TestResultPoints.txt")
//resultPoints := [][3]int{} resultPoints := [][3]int{}
//for _, row := range inputTestResult { for _, row := range inputTestResult {
// tmpPoint, _ := helper.MapToNumber(strings.Split(row, ",")) tmpPoint, _ := helper.MapToNumber(strings.Split(row, ","))
// resultPoints = append(resultPoints, [3]int{tmpPoint[0], tmpPoint[1], tmpPoint[2]}) resultPoints = append(resultPoints, [3]int{tmpPoint[0], tmpPoint[1], tmpPoint[2]})
//} }
//
//fmt.Println(helper.Difference3DPoint(resultPoints, scanners[0].points)) var max float64
// for i, _ := range scanners {
//fmt.Println(scanners[1].position) for j, _ := range scanners {
//fmt.Println(scanners[2].position) if i != j {
//fmt.Println(scanners[3].position) diff := diffBetweenVectors(scanners[i].position, scanners[j].position)
//fmt.Println(scanners[4].position) manhattan := math.Abs(float64(diff[0])) + math.Abs(float64(diff[1])) + math.Abs(float64(diff[2]))
////fmt.Println(scanners[5].position) if manhattan > max {
////fmt.Println(scanners[6].position) max = manhattan
//fmt.Println(len(scanners[0].points)) }
}
}
}
fmt.Println(len(scanners[0].points))
fmt.Println(max)
} }
func runUntilFirstHit(scanners *[]scanner, hitScanners *[]int) bool { func runUntilFirstHit(scanners *[]scanner, hitScanners *[]int) bool {
@ -68,17 +68,16 @@ func runUntilFirstHit(scanners *[]scanner, hitScanners *[]int) bool {
} }
func runFor(scanners *[]scanner, i int, j int) bool { func runFor(scanners *[]scanner, i int, j int) bool {
returnBool := checkIfScannersHaveMatchingBeacons(scanners, i, j) returnBool := checkIfScannersHaveMatchingBeacons(scanners, 0, j)
pointSet := make(map[[3]int]struct{}) if returnBool {
for _, point := range (*scanners)[i].points { pointSet := make(map[[3]int]struct{})
if point[0] == 26 { for _, point := range (*scanners)[0].points {
fmt.Println("Help") pointSet[point] = struct{}{}
}
(*scanners)[0].points = [][3]int{}
for key, _ := range pointSet {
(*scanners)[0].points = append((*scanners)[0].points, key)
} }
pointSet[point] = struct{}{}
}
(*scanners)[i].points = [][3]int{}
for key, _ := range pointSet {
(*scanners)[i].points = append((*scanners)[i].points, key)
} }
return returnBool return returnBool
} }
@ -90,18 +89,16 @@ func checkIfScannersHaveMatchingBeacons(scanners *[]scanner, i int, j int) bool
if len(pointMapper) >= 12 { if len(pointMapper) >= 12 {
rotationsForScanner := getAllPossibleRotationsForScanner(*scanner2) rotationsForScanner := getAllPossibleRotationsForScanner(*scanner2)
i, diff := getRightRotation(scanner1, pointMapper, rotationsForScanner) i, diff := getRightRotation(scanner1, pointMapper, rotationsForScanner)
if i > -1 { scanner2.position = diff
scanner2.position = [3]int{scanner1.position[0] + diff[0], scanner1.position[1] + diff[1], scanner1.position[2] + diff[2]} var pointsOfScanner2inRelationToScanner1 [][3]int
var pointsOfScanner2inRelationToScanner1 [][3]int for x := 0; x < len(rotationsForScanner); x++ {
point := rotationsForScanner[x][i]
for x := 0; x < len(rotationsForScanner[0]); x++ { pointWithDiff := [3]int{point[0] + diff[0], point[1] + diff[1], point[2] + diff[2]}
point := rotationsForScanner[x][i] pointsOfScanner2inRelationToScanner1 = append(pointsOfScanner2inRelationToScanner1, pointWithDiff)
pointWithDiff := [3]int{point[0] + diff[0], point[1] + diff[1], point[2] + diff[2]}
pointsOfScanner2inRelationToScanner1 = append(pointsOfScanner2inRelationToScanner1, pointWithDiff)
}
scanner1.points = append(scanner1.points, pointsOfScanner2inRelationToScanner1...)
return true
} }
scanner1.points = append(scanner1.points, pointsOfScanner2inRelationToScanner1...)
return true
} }
return false return false
} }
@ -148,7 +145,6 @@ func roll(point *[3]int) {
func getAllPossibleRotationsForPoint(point *[3]int) (points [][3]int) { func getAllPossibleRotationsForPoint(point *[3]int) (points [][3]int) {
rotationOrder := "RTTTRTTTRTTT" rotationOrder := "RTTTRTTTRTTT"
switchRotationOrder := "RTR" switchRotationOrder := "RTR"
points = append(points, *point)
executeRotationOrder(point, rotationOrder, &points) executeRotationOrder(point, rotationOrder, &points)
executeRotationOrder(point, switchRotationOrder, &[][3]int{}) executeRotationOrder(point, switchRotationOrder, &[][3]int{})
executeRotationOrder(point, rotationOrder, &points) executeRotationOrder(point, rotationOrder, &points)