From 9d32b5ac1a949d1bd2b167283e8f7b4744b50a4c Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Mon, 6 Dec 2021 15:23:50 +0100 Subject: [PATCH] 2021 - Day 6 --- 2021/6/go.mod | 9 +++++ 2021/6/go.sum | 2 ++ 2021/6/main.go | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 2021/6/go.mod create mode 100644 2021/6/go.sum create mode 100644 2021/6/main.go diff --git a/2021/6/go.mod b/2021/6/go.mod new file mode 100644 index 0000000..c1ceb3a --- /dev/null +++ b/2021/6/go.mod @@ -0,0 +1,9 @@ +module AoC/2021/6 + +require AoC/2021/common v0.0.0 + +require github.com/joho/godotenv v1.4.0 // indirect + +replace AoC/2021/common v0.0.0 => ../common + +go 1.17 diff --git a/2021/6/go.sum b/2021/6/go.sum new file mode 100644 index 0000000..8c9f290 --- /dev/null +++ b/2021/6/go.sum @@ -0,0 +1,2 @@ +github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= +github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= diff --git a/2021/6/main.go b/2021/6/main.go new file mode 100644 index 0000000..7fe77d1 --- /dev/null +++ b/2021/6/main.go @@ -0,0 +1,92 @@ +package main + +import ( + aoc "AoC/2021/common" + "bufio" + "strconv" + "strings" +) + +func main() { + aoc := aoc.New(2021, 6) + + aoc.Test(`3,4,3,1,2`, []int{5934, 26984457539}) + + // This is a very naive solution, it works for part 1 but not for part 2 + aoc.Solution(1, func (input *bufio.Scanner) int { + var fish []int + + input.Scan() + line := input.Text() + numbers := strings.Split(line, ",") + + for _, str := range numbers { + n, err := strconv.Atoi(str) + if err != nil { + panic(err) + } + + fish = append(fish, n) + } + + days := 80 + for day := 1; day <= days; day++ { + add := 0 + + for i := range fish { + if fish[i] == 0 { + add++ + fish[i] = 6 + } else { + fish[i]-- + } + } + + for i := 0; i < add; i++ { + fish = append(fish, 8) + } + } + + return len(fish) + }) + + // This is a much more elegant solution, it can also be used to solve part 1 + aoc.Solution(2, func (input *bufio.Scanner) int { + fish := make(map[int]int) + input.Scan() + line := input.Text() + numbers := strings.Split(line, ",") + + for _, str := range numbers { + n, err := strconv.Atoi(str) + if err != nil { + panic(err) + } + + fish[n]++ + } + + days := 256 + for day := 1; day <= days; day++ { + temp := make(map[int]int) + + for n, c := range fish { + if n == 0 { + temp[8] += c + temp[6] += c + } else { + temp[n-1] += c + } + } + + fish = temp + } + + sum := 0 + for _, c := range fish { + sum += c + } + + return sum + }) +}