|
@@ -9,21 +9,21 @@ import (
|
|
"strings"
|
|
"strings"
|
|
)
|
|
)
|
|
|
|
|
|
-func readInput(file string) []int {
|
|
|
|
|
|
+func readInput(file string) map[int]int {
|
|
content, err := ioutil.ReadFile(file)
|
|
content, err := ioutil.ReadFile(file)
|
|
if err != nil {
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
|
|
fishStrings := strings.Split(string(content), ",")
|
|
fishStrings := strings.Split(string(content), ",")
|
|
- var input []int
|
|
|
|
|
|
+ input := make(map[int]int)
|
|
for _, fishString := range fishStrings {
|
|
for _, fishString := range fishStrings {
|
|
if fishString == "" {
|
|
if fishString == "" {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
|
|
|
|
if number, err := strconv.Atoi(fishString); err == nil {
|
|
if number, err := strconv.Atoi(fishString); err == nil {
|
|
- input = append(input, number)
|
|
|
|
|
|
+ input[number]++
|
|
} else {
|
|
} else {
|
|
log.Fatal(err)
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
@@ -32,19 +32,28 @@ func readInput(file string) []int {
|
|
return input
|
|
return input
|
|
}
|
|
}
|
|
|
|
|
|
-func part1(fish []int, days int) int {
|
|
|
|
|
|
+func part1(fish map[int]int, days int) int {
|
|
for d := 0; d < days; d++ {
|
|
for d := 0; d < days; d++ {
|
|
- max := len(fish)
|
|
|
|
- for i := 0; i < max; i++ {
|
|
|
|
- fish[i]--
|
|
|
|
- if fish[i] < 0 {
|
|
|
|
- fish[i] = 6
|
|
|
|
- fish = append(fish, 8)
|
|
|
|
|
|
+ newFish := make(map[int]int)
|
|
|
|
+ for k, v := range fish {
|
|
|
|
+ if k == 0 {
|
|
|
|
+ newFish[8] = v
|
|
|
|
+ newFish[6] += v
|
|
|
|
+ continue
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ newFish[k-1] += v
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ fish = newFish
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ sum := 0
|
|
|
|
+ for _, v := range fish {
|
|
|
|
+ sum += v
|
|
}
|
|
}
|
|
|
|
|
|
- return len(fish)
|
|
|
|
|
|
+ return sum
|
|
}
|
|
}
|
|
|
|
|
|
func main() {
|
|
func main() {
|
|
@@ -54,4 +63,5 @@ func main() {
|
|
|
|
|
|
input := readInput(os.Args[1])
|
|
input := readInput(os.Args[1])
|
|
fmt.Println("Part 1:", part1(input, 80))
|
|
fmt.Println("Part 1:", part1(input, 80))
|
|
|
|
+ fmt.Println("Part 2:", part1(input, 256))
|
|
}
|
|
}
|