Piotr Czajkowski vor 1 Woche
Ursprung
Commit
3f4d626971
1 geänderte Dateien mit 12 neuen und 44 gelöschten Zeilen
  1. 12 44
      10/code.go

+ 12 - 44
10/code.go

@@ -12,7 +12,7 @@ type Point struct {
 	value byte
 }
 
-func key(p Point) string {
+func (p *Point) key() string {
 	return fmt.Sprintf("%d_%d", p.y, p.x)
 }
 
@@ -50,7 +50,7 @@ func getMoves(reindeer Point, matrix [][]byte, xMax, yMax int) []Point {
 	return moves
 }
 
-func hike(reindeer Point, matrix [][]byte, xMax, yMax int, hash func(Point) string) int {
+func hike(reindeer Point, matrix [][]byte, xMax, yMax int, oneWay bool) int {
 	var nines int
 	visited := make(map[string]bool)
 
@@ -64,9 +64,13 @@ func hike(reindeer Point, matrix [][]byte, xMax, yMax int, hash func(Point) stri
 
 		newMoves := getMoves(current, matrix, xMax, yMax)
 		for _, newMove := range newMoves {
-			if !visited[hash(newMove)] {
+			if oneWay {
+				if !visited[newMove.key()] {
+					moves = append(moves, newMove)
+					visited[newMove.key()] = true
+				}
+			} else {
 				moves = append(moves, newMove)
-				visited[hash(newMove)] = true
 			}
 		}
 	}
@@ -74,7 +78,7 @@ func hike(reindeer Point, matrix [][]byte, xMax, yMax int, hash func(Point) stri
 	return nines
 }
 
-func part1(matrix [][]byte) int {
+func solve(matrix [][]byte, oneWay bool) int {
 	var result int
 	xMax := len(matrix[0])
 	yMax := len(matrix)
@@ -83,7 +87,7 @@ func part1(matrix [][]byte) int {
 		for x := range matrix[y] {
 			if matrix[y][x] == '0' {
 				reindeer := Point{x: x, y: y, value: '0'}
-				result += hike(reindeer, matrix, xMax, yMax, key)
+				result += hike(reindeer, matrix, xMax, yMax, oneWay)
 			}
 		}
 	}
@@ -91,42 +95,6 @@ func part1(matrix [][]byte) int {
 	return result
 }
 
-func hike2(reindeer Point, matrix [][]byte, xMax, yMax int) int {
-	var nines int
-
-	moves := []Point{reindeer}
-	for len(moves) > 0 {
-		current := moves[0]
-		moves = moves[1:]
-		if matrix[current.y][current.x] == '9' {
-			nines++
-		}
-
-		newMoves := getMoves(current, matrix, xMax, yMax)
-		for _, newMove := range newMoves {
-			moves = append(moves, newMove)
-		}
-	}
-
-	return nines
-}
-
-func part2(matrix [][]byte) int {
-	var result int
-	xMax := len(matrix[0])
-	yMax := len(matrix)
-
-	for y := range matrix {
-		for x := range matrix[y] {
-			if matrix[y][x] == '0' {
-				reindeer := Point{x: x, y: y, value: '0'}
-				result += hike2(reindeer, matrix, xMax, yMax)
-			}
-		}
-	}
-
-	return result
-}
 func main() {
 	if len(os.Args) < 2 {
 		log.Fatal("You need to specify a file!")
@@ -139,6 +107,6 @@ func main() {
 	}
 
 	matrix := readInput(file)
-	fmt.Println("Part1:", part1(matrix))
-	fmt.Println("Part2:", part2(matrix))
+	fmt.Println("Part1:", solve(matrix, true))
+	fmt.Println("Part2:", solve(matrix, false))
 }