d5p2
This commit is contained in:
		
							parent
							
								
									db7295bcd9
								
							
						
					
					
						commit
						7617d7ae99
					
				
					 3 changed files with 59 additions and 0 deletions
				
			
		
							
								
								
									
										43
									
								
								d5/d5.go
									
										
									
									
									
								
							
							
						
						
									
										43
									
								
								d5/d5.go
									
										
									
									
									
								
							|  | @ -56,6 +56,41 @@ func generatePoints(segments []segment) []point { | |||
| 	return points | ||||
| } | ||||
| 
 | ||||
| func generatePointsWithDiagonals(segments []segment) []point { | ||||
| 	points := []point{} | ||||
| 
 | ||||
| 	for _, segment := range segments { | ||||
| 		startX := segment.a.x | ||||
| 		startY := segment.a.y | ||||
| 		endX := segment.b.x | ||||
| 		endY := segment.b.y | ||||
| 
 | ||||
| 		dx := 1 | ||||
| 		dy := 1 | ||||
| 
 | ||||
| 		if segment.a.x == segment.b.x { | ||||
| 			dx = 0 | ||||
| 		} else if segment.a.x > segment.b.x { | ||||
| 			dx = -1 | ||||
| 		} | ||||
| 
 | ||||
| 		if segment.a.y == segment.b.y { | ||||
| 			dy = 0 | ||||
| 		} else if segment.a.y > segment.b.y { | ||||
| 			dy = -1 | ||||
| 		} | ||||
| 
 | ||||
| 		points = append(points, point{startX, startY}) | ||||
| 		for startX != endX || startY != endY { | ||||
| 			startX += dx | ||||
| 			startY += dy | ||||
| 			points = append(points, point{startX, startY}) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return points | ||||
| } | ||||
| 
 | ||||
| func findIntersections(points []point) map[point]int { | ||||
| 
 | ||||
| 	intersections := map[point]int{} | ||||
|  | @ -86,3 +121,11 @@ func D5(input string) int { | |||
| 	intersections := findIntersections(points) | ||||
| 	return countIntersections(intersections) | ||||
| } | ||||
| 
 | ||||
| func D5P2(input string) int { | ||||
| 	lines := strings.Split(strings.TrimSpace(input), "\n") | ||||
| 	segments := createSegments(lines) | ||||
| 	points := generatePointsWithDiagonals(segments) | ||||
| 	intersections := findIntersections(points) | ||||
| 	return countIntersections(intersections) | ||||
| } | ||||
|  |  | |||
|  | @ -20,3 +20,18 @@ func TestD5(t *testing.T) { | |||
| 
 | ||||
| 	assert.EqualValues(t, 5, D5(input)) | ||||
| } | ||||
| 
 | ||||
| func TestD5P2(t *testing.T) { | ||||
| 	input := `0,9 -> 5,9 | ||||
| 8,0 -> 0,8 | ||||
| 9,4 -> 3,4 | ||||
| 2,2 -> 2,1 | ||||
| 7,0 -> 7,4 | ||||
| 6,4 -> 2,0 | ||||
| 0,9 -> 2,9 | ||||
| 3,4 -> 1,4 | ||||
| 0,0 -> 8,8 | ||||
| 5,5 -> 8,2` | ||||
| 
 | ||||
| 	assert.EqualValues(t, 12, D5P2(input)) | ||||
| } | ||||
|  |  | |||
							
								
								
									
										1
									
								
								main.go
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								main.go
									
										
									
									
									
								
							|  | @ -33,4 +33,5 @@ func main() { | |||
| 	fmt.Printf("day 4: %v\n", d4.D4(client.Day(4))) | ||||
| 	fmt.Printf("day 4 part 2: %v\n", d4.D4P2(client.Day(4))) | ||||
| 	fmt.Printf("day 5: %v\n", d5.D5(client.Day(5))) | ||||
| 	fmt.Printf("day 5 part 2: %v\n", d5.D5P2(client.Day(5))) | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue