diff --git a/.gitignore b/.gitignore index 9f08bcb..07d28ef 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ *.user /bin/ /obj/ +*.exe diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..50c4d2a --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module aoc2021 + +go 1.17 diff --git a/main.go b/main.go new file mode 100644 index 0000000..0b140b0 --- /dev/null +++ b/main.go @@ -0,0 +1,7 @@ +package main + +import "aoc2021/src" + +func main() { + src.Day01() +} diff --git a/src/01.go b/src/01.go new file mode 100644 index 0000000..abe0eff --- /dev/null +++ b/src/01.go @@ -0,0 +1,69 @@ +package src + +import ( + "fmt" + "io/ioutil" + "strconv" + "strings" +) + +func Day01() { + fileBytes, fileErr := ioutil.ReadFile("inputs/01.txt") + if fileErr != nil { + panic(fileErr) + } + + fileStr := string(fileBytes) + fileLines := strings.Split(strings.ReplaceAll(fileStr, "\r", ""), "\n") + fileInts := make([]int, len(fileLines)) + var err error + for idx, line := range fileLines { + fileInts[idx], err = strconv.Atoi(line) + if err != nil { + panic(err) + } + } + part1(fileInts) + part2(fileInts) +} + +func part1(depths []int) { + lastDepth := 0 + numIncreased := -1 + + for _, depth := range depths { + if depth > lastDepth { + numIncreased++ + } + + lastDepth = depth + } + + fmt.Println("part1: increased:", numIncreased) +} + +func part2(depths []int) { + lastTotal := 0 + numIncreased := -1 + + num1 := -1 + num2 := -1 + num3 := -1 + + for _, depth := range depths { + num1 = num2 + num2 = num3 + num3 = depth + if num1 < 0 || num2 < 0 || num3 < 0 { + continue + } + + total := num1 + num2 + num3 + if total > lastTotal { + numIncreased++ + } + lastTotal = total + } + + fmt.Println("part2: increased:", numIncreased) +}