You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
933 B
Go
57 lines
933 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
MaxDays = 256
|
|
PartOneDays = 80
|
|
MaxTimer = 8
|
|
)
|
|
|
|
func shiftArrayLeft(arr *[MaxTimer + 1]int64) {
|
|
for i := 1; i < len(arr)-1; i++ {
|
|
arr[i-1] = arr[i]
|
|
arr[i] = arr[i+1]
|
|
}
|
|
}
|
|
|
|
func calcSum(arr *[MaxTimer + 1]int64) (sum int64) {
|
|
for _, v := range arr {
|
|
sum += v
|
|
}
|
|
return
|
|
}
|
|
|
|
func main() {
|
|
file, err := ioutil.ReadFile("input.txt")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
inputStrs := strings.Split(strings.Trim(string(file), "\n"), ",")
|
|
|
|
var dayCounts [MaxTimer + 1]int64
|
|
for _, v := range inputStrs {
|
|
num, _ := strconv.Atoi(v)
|
|
dayCounts[num]++
|
|
}
|
|
|
|
for daysPassed := 0; daysPassed < MaxDays; daysPassed++ {
|
|
if daysPassed == PartOneDays {
|
|
fmt.Println(calcSum(&dayCounts))
|
|
}
|
|
|
|
newSpawn := dayCounts[0]
|
|
shiftArrayLeft(&dayCounts)
|
|
dayCounts[6] += newSpawn
|
|
dayCounts[8] = newSpawn
|
|
}
|
|
|
|
fmt.Println(calcSum(&dayCounts))
|
|
}
|