2021 Day 6
This commit is contained in:
parent
18285b0bf1
commit
01699081b4
1 changed files with 73 additions and 0 deletions
73
2021/day6/main.go
Normal file
73
2021/day6/main.go
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/jdkaplan/advent-of-code/aoc"
|
||||
)
|
||||
|
||||
func main() {
|
||||
text := aoc.Input().ReadFile("day6.txt")
|
||||
fmt.Println(part1(text))
|
||||
fmt.Println(part2(text))
|
||||
}
|
||||
|
||||
type Fish struct {
|
||||
ticks int
|
||||
}
|
||||
|
||||
func NewFish() *Fish {
|
||||
return &Fish{8}
|
||||
}
|
||||
|
||||
func (f *Fish) Tick() bool {
|
||||
if f.ticks == 0 {
|
||||
f.ticks = 6
|
||||
return true
|
||||
}
|
||||
f.ticks--
|
||||
return false
|
||||
}
|
||||
|
||||
func part1(text string) int {
|
||||
var fish []*Fish
|
||||
for _, n := range strings.Split(text, ",") {
|
||||
fish = append(fish, &Fish{aoc.MustInt(n)})
|
||||
}
|
||||
for i := 0; i < 80; i++ {
|
||||
for _, f := range fish {
|
||||
if f.Tick() {
|
||||
fish = append(fish, NewFish())
|
||||
}
|
||||
}
|
||||
}
|
||||
return len(fish)
|
||||
}
|
||||
|
||||
func part2(text string) int {
|
||||
delays := make(map[int]int)
|
||||
for _, n := range strings.Split(text, ",") {
|
||||
delays[aoc.MustInt(n)]++
|
||||
}
|
||||
for i := 0; i < 256; i++ {
|
||||
newDelays := make(map[int]int)
|
||||
|
||||
// Reproduce
|
||||
newDelays[8] = delays[0]
|
||||
|
||||
// Tick
|
||||
for d := 1; d <= 8; d++ {
|
||||
newDelays[d-1] = delays[d]
|
||||
}
|
||||
newDelays[6] += delays[0]
|
||||
|
||||
delays = newDelays
|
||||
}
|
||||
|
||||
var total int
|
||||
for _, n := range delays {
|
||||
total += n
|
||||
}
|
||||
return total
|
||||
}
|
||||
Loading…
Reference in a new issue