Day19
This commit is contained in:
parent
7370367223
commit
602d4f9475
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user