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)) }