d6
This commit is contained in:
		
							parent
							
								
									7617d7ae99
								
							
						
					
					
						commit
						1b2cdbca69
					
				
					 3 changed files with 81 additions and 0 deletions
				
			
		
							
								
								
									
										59
									
								
								d6/d6.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								d6/d6.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | |||
| package d6 | ||||
| 
 | ||||
| import ( | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| ) | ||||
| 
 | ||||
| func toNum(in []string) []int { | ||||
| 	nums := make([]int, 0, len(in)) | ||||
| 
 | ||||
| 	for idx, str := range in { | ||||
| 		num, _ := strconv.Atoi(str) | ||||
| 		nums[idx] = num | ||||
| 	} | ||||
| 
 | ||||
| 	return nums | ||||
| } | ||||
| 
 | ||||
| func D6(input string, startDays int) int { | ||||
| 	fishes := toNum(strings.Split(strings.TrimSpace(input), ",")) | ||||
| 
 | ||||
| 	for day := 0; day < startDays; day++ { | ||||
| 		for idx := range fishes { | ||||
| 			if fishes[idx] == 0 { | ||||
| 				fishes[idx] = 6 | ||||
| 				fishes = append(fishes, 8) | ||||
| 			} else { | ||||
| 				fishes[idx]-- | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return len(fishes) | ||||
| } | ||||
| 
 | ||||
| // Inspired by | ||||
| // https://www.reddit.com/r/adventofcode/comments/r9z49j/comment/hnfaisu/?utm_source=share&utm_medium=web2x&context=3 | ||||
| func D6P2(input string, startDays int) int { | ||||
| 	fishes := toNum(strings.Split(strings.TrimSpace(input), ",")) | ||||
| 	ages := make([]int, 9) | ||||
| 
 | ||||
| 	for _, fish := range fishes { | ||||
| 		ages[fish]++ | ||||
| 	} | ||||
| 
 | ||||
| 	for day := 0; day < startDays; day++ { | ||||
| 		dieToday := ages[0] | ||||
| 		ages = ages[1:] | ||||
| 		ages[6] += dieToday | ||||
| 		ages = append(ages, dieToday) | ||||
| 	} | ||||
| 
 | ||||
| 	sum := 0 | ||||
| 	for _, age := range ages { | ||||
| 		sum += age | ||||
| 	} | ||||
| 
 | ||||
| 	return sum | ||||
| } | ||||
							
								
								
									
										19
									
								
								d6/d6_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								d6/d6_test.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| package d6 | ||||
| 
 | ||||
| import ( | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| func TestD6(t *testing.T) { | ||||
| 	assert.EqualValues(t, 5934, D6("3,4,3,1,2", 80)) | ||||
| } | ||||
| 
 | ||||
| func TestD6P2Naive(t *testing.T) { | ||||
| 	assert.EqualValues(t, 26984457539, D6("3", 256)) | ||||
| } | ||||
| 
 | ||||
| func TestD6P2(t *testing.T) { | ||||
| 	assert.EqualValues(t, 26984457539, D6P2("3,4,3,1,2", 256)) | ||||
| } | ||||
							
								
								
									
										3
									
								
								main.go
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								main.go
									
										
									
									
									
								
							|  | @ -12,6 +12,7 @@ import ( | |||
| 	"github.com/fotonmoton/aoc2021/d3" | ||||
| 	"github.com/fotonmoton/aoc2021/d4" | ||||
| 	"github.com/fotonmoton/aoc2021/d5" | ||||
| 	"github.com/fotonmoton/aoc2021/d6" | ||||
| ) | ||||
| 
 | ||||
| func main() { | ||||
|  | @ -34,4 +35,6 @@ func main() { | |||
| 	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))) | ||||
| 	fmt.Printf("day 6: %v\n", d6.D6(client.Day(6), 80)) | ||||
| 	fmt.Printf("day 6 part 2: %v\n", d6.D6P2(client.Day(6), 256)) | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue