Browse Source

Solved part1

Piotr Czajkowski 1 year ago
parent
commit
ae055778e0
1 changed files with 12 additions and 30 deletions
  1. 12 30
      15/code.go

+ 12 - 30
15/code.go

@@ -45,39 +45,21 @@ func getDistance(sensor point, beacon point) int {
 	return abs(sensor.x-beacon.x) + abs(sensor.y-beacon.y)
 }
 
-func markOccupied(sensor point, distance int, occupied map[int]map[int]byte) {
-	end := sensor.y - distance
-
-	width := distance
-	for i := sensor.y; i >= end; i-- {
-		if occupied[i] == nil {
-			occupied[i] = make(map[int]byte)
-		}
-
-		for j := sensor.x - width; j <= sensor.x+width; j++ {
-			_, ok := occupied[i][j]
-			if !ok {
-				occupied[i][j] = '#'
-			}
-		}
-		width--
+func markOccupied(sensor point, distance int, occupied map[int]map[int]byte, row int) {
+	width := distance - abs(row-sensor.y)
+	if occupied[row] == nil {
+		occupied[row] = make(map[int]byte)
 	}
 
-	width = distance - 1
-	end = sensor.y + distance
-	for i := sensor.y + 1; i <= end; i++ {
-		if occupied[i] == nil {
-			occupied[i] = make(map[int]byte)
-		}
-
-		for j := sensor.x - width; j <= sensor.x+width; j++ {
-			occupied[i][j] = '#'
+	for j := sensor.x - width; j <= sensor.x+width; j++ {
+		_, ok := occupied[row][j]
+		if !ok {
+			occupied[row][j] = '#'
 		}
-		width--
 	}
 }
 
-func drawLines(points [][2]point) map[int]map[int]byte {
+func drawLines(points [][2]point, row int) map[int]map[int]byte {
 	occupied := make(map[int]map[int]byte)
 	for i := range points {
 		if occupied[points[i][0].y] == nil {
@@ -91,7 +73,7 @@ func drawLines(points [][2]point) map[int]map[int]byte {
 		occupied[points[i][1].y][points[i][1].x] = 'b'
 
 		distance := getDistance(points[i][0], points[i][1])
-		markOccupied(points[i][0], distance, occupied)
+		markOccupied(points[i][0], distance, occupied, row)
 	}
 
 	return occupied
@@ -111,7 +93,7 @@ func filterPoints(points [][2]point, row int) [][2]point {
 
 func part1(points [][2]point, row int) int {
 	filtered := filterPoints(points, row)
-	occupied := drawLines(filtered)
+	occupied := drawLines(filtered, row)
 	count := 0
 	for _, value := range occupied[row] {
 		if value == '#' {
@@ -135,5 +117,5 @@ func main() {
 	}
 
 	points := readInput(file)
-	fmt.Println("Part1:", part1(points, 10))
+	fmt.Println("Part1:", part1(points, 2000000))
 }