|  | @@ -53,17 +53,9 @@ func checkAntinode(antinode Point, matrix [][]byte, key byte) bool {
 | 
											
												
													
														|  |  		return false
 |  |  		return false
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	if matrix[antinode.y][antinode.x] == key {
 |  | 
 | 
											
												
													
														|  | -		return false
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  	return true
 |  |  	return true
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -func checkInLine(antinode Point, antenna Point) bool {
 |  | 
 | 
											
												
													
														|  | -	return antinode.x == antenna.x || antinode.y == antenna.y || abs(antinode.x-antenna.x) == abs(antinode.y-antenna.y)
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  func getAntinodes(groups map[byte][]Point, matrix [][]byte, multi bool) map[string]Point {
 |  |  func getAntinodes(groups map[byte][]Point, matrix [][]byte, multi bool) map[string]Point {
 | 
											
												
													
														|  |  	antinodes := make(map[string]Point)
 |  |  	antinodes := make(map[string]Point)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -78,17 +70,6 @@ func getAntinodes(groups map[byte][]Point, matrix [][]byte, multi bool) map[stri
 | 
											
												
													
														|  |  				for checkAntinode(firstAntinode, matrix, key) {
 |  |  				for checkAntinode(firstAntinode, matrix, key) {
 | 
											
												
													
														|  |  					antinodes[firstAntinode.key()] = firstAntinode
 |  |  					antinodes[firstAntinode.key()] = firstAntinode
 | 
											
												
													
														|  |  					if multi {
 |  |  					if multi {
 | 
											
												
													
														|  | -						for _, antenna := range items {
 |  | 
 | 
											
												
													
														|  | -							_, ok := antinodes[antenna.key()]
 |  | 
 | 
											
												
													
														|  | -							if ok {
 |  | 
 | 
											
												
													
														|  | -								continue
 |  | 
 | 
											
												
													
														|  | -							}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -							if checkInLine(firstAntinode, antenna) {
 |  | 
 | 
											
												
													
														|  | -								antinodes[antenna.key()] = antenna
 |  | 
 | 
											
												
													
														|  | -							}
 |  | 
 | 
											
												
													
														|  | -						}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  						firstAntinode = Point{x: firstAntinode.x - deltaX, y: firstAntinode.y - deltaY}
 |  |  						firstAntinode = Point{x: firstAntinode.x - deltaX, y: firstAntinode.y - deltaY}
 | 
											
												
													
														|  |  					} else {
 |  |  					} else {
 | 
											
												
													
														|  |  						firstAntinode = Point{x: -1, y: -1}
 |  |  						firstAntinode = Point{x: -1, y: -1}
 | 
											
										
											
												
													
														|  | @@ -99,17 +80,6 @@ func getAntinodes(groups map[byte][]Point, matrix [][]byte, multi bool) map[stri
 | 
											
												
													
														|  |  				for checkAntinode(secondAntinode, matrix, key) {
 |  |  				for checkAntinode(secondAntinode, matrix, key) {
 | 
											
												
													
														|  |  					antinodes[secondAntinode.key()] = secondAntinode
 |  |  					antinodes[secondAntinode.key()] = secondAntinode
 | 
											
												
													
														|  |  					if multi {
 |  |  					if multi {
 | 
											
												
													
														|  | -						for _, antenna := range items {
 |  | 
 | 
											
												
													
														|  | -							_, ok := antinodes[antenna.key()]
 |  | 
 | 
											
												
													
														|  | -							if ok {
 |  | 
 | 
											
												
													
														|  | -								continue
 |  | 
 | 
											
												
													
														|  | -							}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -							if checkInLine(secondAntinode, antenna) {
 |  | 
 | 
											
												
													
														|  | -								antinodes[antenna.key()] = antenna
 |  | 
 | 
											
												
													
														|  | -							}
 |  | 
 | 
											
												
													
														|  | -						}
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  						secondAntinode = Point{x: secondAntinode.x + deltaX, y: secondAntinode.y + deltaY}
 |  |  						secondAntinode = Point{x: secondAntinode.x + deltaX, y: secondAntinode.y + deltaY}
 | 
											
												
													
														|  |  					} else {
 |  |  					} else {
 | 
											
												
													
														|  |  						secondAntinode = Point{x: -1, y: -1}
 |  |  						secondAntinode = Point{x: -1, y: -1}
 | 
											
										
											
												
													
														|  | @@ -122,6 +92,20 @@ func getAntinodes(groups map[byte][]Point, matrix [][]byte, multi bool) map[stri
 | 
											
												
													
														|  |  	return antinodes
 |  |  	return antinodes
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +func part2(groups map[byte][]Point, matrix [][]byte) int {
 | 
											
												
													
														|  | 
 |  | +	antinodes := getAntinodes(groups, matrix, true)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	for _, items := range groups {
 | 
											
												
													
														|  | 
 |  | +		if len(items) > 1 {
 | 
											
												
													
														|  | 
 |  | +			for _, item := range items {
 | 
											
												
													
														|  | 
 |  | +				antinodes[item.key()] = item
 | 
											
												
													
														|  | 
 |  | +			}
 | 
											
												
													
														|  | 
 |  | +		}
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	return len(antinodes)
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  func main() {
 |  |  func main() {
 | 
											
												
													
														|  |  	if len(os.Args) < 2 {
 |  |  	if len(os.Args) < 2 {
 | 
											
												
													
														|  |  		log.Fatal("You need to specify a file!")
 |  |  		log.Fatal("You need to specify a file!")
 | 
											
										
											
												
													
														|  | @@ -135,5 +119,5 @@ func main() {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	groups, matrix := readInput(file)
 |  |  	groups, matrix := readInput(file)
 | 
											
												
													
														|  |  	fmt.Println("Part1:", len(getAntinodes(groups, matrix, false)))
 |  |  	fmt.Println("Part1:", len(getAntinodes(groups, matrix, false)))
 | 
											
												
													
														|  | -	fmt.Println("Part2:", len(getAntinodes(groups, matrix, true)))
 |  | 
 | 
											
												
													
														|  | 
 |  | +	fmt.Println("Part2:", part2(groups, matrix))
 | 
											
												
													
														|  |  }
 |  |  }
 |