From 602d4f9475ed2643652dffe33aac7d41c810a448 Mon Sep 17 00:00:00 2001 From: Karl Spickermann Date: Mon, 20 Dec 2021 02:04:00 +0100 Subject: [PATCH] Day19 --- src/day19/day19.go | 92 ++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 48 deletions(-) diff --git a/src/day19/day19.go b/src/day19/day19.go index 337702e..c1e80de 100644 --- a/src/day19/day19.go +++ b/src/day19/day19.go @@ -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]}) } } - //hitScanners := []int{0} - //run := true - //for run { - // 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)) + hitScanners := []int{0} + run := true + for run { + run = runUntilFirstHit(&scanners, &hitScanners) + } - //inputTestResult, _ := helper.GetInput("day19TestResultPoints.txt") - //resultPoints := [][3]int{} - //for _, row := range inputTestResult { - // tmpPoint, _ := helper.MapToNumber(strings.Split(row, ",")) - // resultPoints = append(resultPoints, [3]int{tmpPoint[0], tmpPoint[1], tmpPoint[2]}) - //} - // - //fmt.Println(helper.Difference3DPoint(resultPoints, scanners[0].points)) - // - //fmt.Println(scanners[1].position) - //fmt.Println(scanners[2].position) - //fmt.Println(scanners[3].position) - //fmt.Println(scanners[4].position) - ////fmt.Println(scanners[5].position) - ////fmt.Println(scanners[6].position) - //fmt.Println(len(scanners[0].points)) + inputTestResult, _ := helper.GetInput("day19TestResultPoints.txt") + resultPoints := [][3]int{} + for _, row := range inputTestResult { + tmpPoint, _ := helper.MapToNumber(strings.Split(row, ",")) + resultPoints = append(resultPoints, [3]int{tmpPoint[0], tmpPoint[1], tmpPoint[2]}) + } + + var max float64 + for i, _ := range scanners { + for j, _ := range scanners { + if i != j { + diff := diffBetweenVectors(scanners[i].position, scanners[j].position) + manhattan := math.Abs(float64(diff[0])) + math.Abs(float64(diff[1])) + math.Abs(float64(diff[2])) + if manhattan > max { + max = manhattan + } + } + } + } + fmt.Println(len(scanners[0].points)) + fmt.Println(max) } 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 { - returnBool := checkIfScannersHaveMatchingBeacons(scanners, i, j) - pointSet := make(map[[3]int]struct{}) - for _, point := range (*scanners)[i].points { - if point[0] == 26 { - fmt.Println("Help") + returnBool := checkIfScannersHaveMatchingBeacons(scanners, 0, j) + if returnBool { + pointSet := make(map[[3]int]struct{}) + for _, point := range (*scanners)[0].points { + 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 } @@ -90,18 +89,16 @@ func checkIfScannersHaveMatchingBeacons(scanners *[]scanner, i int, j int) bool if len(pointMapper) >= 12 { rotationsForScanner := getAllPossibleRotationsForScanner(*scanner2) i, diff := getRightRotation(scanner1, pointMapper, rotationsForScanner) - if i > -1 { - scanner2.position = [3]int{scanner1.position[0] + diff[0], scanner1.position[1] + diff[1], scanner1.position[2] + diff[2]} - var pointsOfScanner2inRelationToScanner1 [][3]int - - for x := 0; x < len(rotationsForScanner[0]); x++ { - point := rotationsForScanner[x][i] - 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 + scanner2.position = diff + var pointsOfScanner2inRelationToScanner1 [][3]int + for x := 0; x < len(rotationsForScanner); x++ { + point := rotationsForScanner[x][i] + 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 + } return false } @@ -148,7 +145,6 @@ func roll(point *[3]int) { func getAllPossibleRotationsForPoint(point *[3]int) (points [][3]int) { rotationOrder := "RTTTRTTTRTTT" switchRotationOrder := "RTR" - points = append(points, *point) executeRotationOrder(point, rotationOrder, &points) executeRotationOrder(point, switchRotationOrder, &[][3]int{}) executeRotationOrder(point, rotationOrder, &points)