diff --git a/06/input.txt b/06/input.txt new file mode 100644 index 0000000..a7af2b1 --- /dev/null +++ b/06/input.txt @@ -0,0 +1 @@ +3,4,3,1,2 \ No newline at end of file diff --git a/06/main.go b/06/main.go new file mode 100644 index 0000000..87ee5be --- /dev/null +++ b/06/main.go @@ -0,0 +1,56 @@ +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)) +}