From d83ed5dd0bdd56f9596a7b8e5385578468aa94f5 Mon Sep 17 00:00:00 2001 From: Elis Hirwing Date: Wed, 2 Dec 2020 19:51:01 +0100 Subject: [PATCH] [2020-12-03] Add solutions for day03 --- Makefile | 2 + day03/example.txt | 11 ++ day03/input.txt | 323 ++++++++++++++++++++++++++++++++++++++++++++++ day03/lib.go | 20 +++ day03/parse.go | 14 ++ day03/solve1.go | 9 ++ day03/solve2.go | 13 ++ main.go | 4 + 8 files changed, 396 insertions(+) create mode 100644 day03/example.txt create mode 100644 day03/input.txt create mode 100644 day03/lib.go create mode 100644 day03/parse.go create mode 100644 day03/solve1.go create mode 100644 day03/solve2.go diff --git a/Makefile b/Makefile index 91013c0..b3cdd32 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,8 @@ day02: go run main.go day02 input day03: + go run main.go day03 input + day04: day05: day06: diff --git a/day03/example.txt b/day03/example.txt new file mode 100644 index 0000000..7e88cdc --- /dev/null +++ b/day03/example.txt @@ -0,0 +1,11 @@ +..##....... +#...#...#.. +.#....#..#. +..#.#...#.# +.#...##..#. +..#.##..... +.#.#.#....# +.#........# +#.##...#... +#...##....# +.#..#...#.# diff --git a/day03/input.txt b/day03/input.txt new file mode 100644 index 0000000..49c14b1 --- /dev/null +++ b/day03/input.txt @@ -0,0 +1,323 @@ +..#.#...#.#.#.##.....###.#....# +...........##.#...#.#.......... +....#.....#..#.............#... +.#....###..##...#...##...#.#..# +#.......#.........#..#.......#. +...#.##..##...#.#......#.##.#.. +#.#..##.....#.....#..##........ +...#.####...#.##...#........... +.#...#..#..#....#.#.#.#.##..... +##.#..#.##..#......#..##.#.#..# +.#.##.....#.#...............#.# +..##.#.....#.....##..##.#....#. +#..#..........#...##........#.. +#..##.#.#...............#..#... +..#....#...#.......#.......#... +.........#.#.##.#........#..... +#...##....#..#.........#.#...## +...#.#...#...........#..#...#.. +...#..#........#...#........... +.#....##.#...#.#....#....##.... +...#...#......#.#.......#...##. +####..........##....#.......... +#..#........................... +#....#...####..##.#......#.#... +..#..#.....##.....#...#....#..# +#.##......#..##........#....... +..........#.....#...#.#.#....## +....##...##..#........#...#..#. +#..#..#...##..............##... +###.##..##.###...#....##.#..#.. +.#......#.................#.#.. +#.#..#.##.#.#.#.....#.........# +..##......#.......##........#.. +#..............#.##.#.....#.... +............................##. +..#.##......#..........#....#.. +..##.....#..##.#....#.......##. +..#.#.##.#.........#........... +...........##.#.#...#......###. +#....#...#........#.#...#.#.### +..............#...#.....##....# +#...#...#..............#..#...# +.##..#.........#.##.#..#...##.. +.....#.........#..#..#.......#. +.#......#.#.#....##..#...#..##. +#....................#.#....#.. +......#.....##............#.... +.#.....#......####.....#....##. +##.####.#..#..........#......#. +##....................#..##.... +.....#...#.#.##.#.###.....#.... +.#..#...####.#.#...#.#.....#... +#.....##.........##.##.##.....# +....#....##.###.........#...### +.......#........#.##.....#####. +...#.##..#...#...####.....##... +..#....#....#......#......#.#.. +...#.#.#.........#.......#..#.. +.....#...........#.#........##. +..##...#.#.##.#.#.#...###.#.... +..##.............###....#.#.... +#.......#....#..#...#..##..#... +....##..#.......####....#..#.## +##....#...#.#.#...#...#........ +....#.#................#...#... +...#.....#.#.......##....#.#..# +#....##.#...#.#..#.#.........#. +#..##.........##.....#...#..... +....#.....#.#..#..##..##.##...# +#.....#...#.#.#.##....#.#.##... +.#.#........#..##.......#...#.# +..###.....#..#.##....#...#....# +...#..###...#...#.......#..#... +.#....##.......#.#..........##. +...#.#.............##.....##... +..#..#...#.....#...#........... +.#.#......#.##....#.....#...... +........#.#.....#.#...#..#.#..# +#.....#.#.....#.##..#.#....#.#. +..#..###.#.#........#.....##..# +#.#....#......#.#....###..#...# +...#.#....#..#.##.....#...#.... +....##....#.#...#.........#..## +.#......#...#.............#..#. +#........#........#.#.....##... +..##..#.##..#........#......... +.....#...#...#..#.....#.#.##.#. +..#..#..#.........#...#.......# +....#.....#.......#.##.#.##..## +......#.......##...#......#.... +....#....##.......###.#......#. +.....#..#.#........#....#.....# +#...#...#....#...###........#.. +#...........####.......#.#..#.# +..###....#..........#...#.###.. +....#.#.....#....#..#.....#.##. +...##.#..#..#.......#......#.#. +....#......###..#.....#.....#.. +.....#.#.#.....#.##.#....####.. +.##....#.....#.#....##..#...... +#..#.....#..#...#....#.#....... +.##.#..####..#.##.#......#..... +......#....#.......##.##....#.. +...#....#....#..##.......##.### +..##..........##.............#. +.#...#.#...##..##.....#..#..... +....#.#.##...................#. +.......#.#..#....#.....#....... +.#.#..#....####...#.#.##....#.. +.#.##...#..#..#...#.#.......#.. +##.#.....##.........#.......#.. +.##...#.....#.........##.#....# +.............#..#............## +...##.......#.....#.......#.##. +##..##......................... +.##.#........#........#........ +.....#................#.#...... +.............#....#....##....#. +#..##...##...#..#.#............ +.......#...####.#..#..#.....##. +..#.#..#......#.....#.#.#.....# +...#..##........#..#.#....#.#.. +.#.....#..###..#....#.##.#...#. +#.#..#.##.#..#......#.###...#.. +##..#.#..###....##.#...#...##.# +##..#.........#...##......#.... +#.#...#.#..#..........#.......# +.......#.#.......#.....##..#... +........#..##............##.#.. +........##.....#........#..#... +#..##.#..###......##........... +..#.....#.#.#....#...#.#..#..## +#...............#.......#.#.##. +#..#.....#....#............#.#. +...#....#...#....#..#..###..... +..#....#.#.....#..#......##.#.# +.#.#....#..#...#....#........#. +..##....##....#.....#.#........ +.#...#....##..##.....##.....##. +.#...........#....##...##.#.... +...#.....#......###.##.#....... +......#.#..##.#.#....#...#...## +....#...###.##....#.#.....#.... +.......#.....#......#.....##..# +.####.#...##..#....#........... +................###...#....#..# +...#...#.....###.#.##.......#.. +..#....#...##...#.###......#.#. +#...#......#............#.....# +#.........#...............#..#. +...#.##.....#............#..... +........#......##..#..#..#.#..# +....#....#.....#.#.....##..#... +.....#....#..##.....#.......... +.##....#..#...........##....... +#......##.....#...#.....#...... +...#.....#......#.#....#....... +...#................##...#..#.. +........#..........#....#...... +......#....#.#.#...........#.#. +.#............#....##.......##. +#.......#.....#...##.#..##..... +.#.....#.##..#..#....#.#..#.#.# +....#...............###........ +#####...........#..#.......#..# +...#.......#...#.#............# +#...#..#.#...#.#...#.##.....##. +.#..#..#..#.....#....#...#..... +.#...#......#.......#.........# +.#....#.....#...#...#..#....#.. +#....#....#.......#.....##..... +.#...#.#.##.#....#..##........# +..##...#............#.......... +..........#..#..#...#....#..... +..#.......#....#.....##..##.... +.#...#......#...#..###...#...#. +..##...#......#...#.#.#...#.... +.....#..#.#.#.#.#...#....##..#. +##..#..##....#.#........##.#... +.##..#.#...##..#....#..#....... +.....#...#...#..#.#..#......#.. +.#.....##.##..#....####..#....# +......##.................#....# +....##.......###...#.##...##.#. +...#...#.................##.#.. +.#.....##...#...#.....#.....##. +##.........####..#...#...#....# +...##.....#......#.###..#...... +.....###..##.#.......###..##... +#....#...#.#...#...#.#....#..#. +#...#.........##.#.........###. +#....#..###..........##........ +.###.....#.#.....#........##..# +....#.........##..#..#.#.#..#.. +..#......#...........#..##...#. +...#.#..#..#...#.##..#..#.....# +.#...#...#....................# +..#..##..#.............#.....#. +.....###.#.#.#...##..#.##....#. +..#...####..##.#....#...#...#.. +.....#..#........#.#.#..#.##... +#.#.........####..#...#.#...... +..............#..#........#.... +....#........#......#.........# +#..#.##......#.#.......#....#.. +....#..............#.#.#..#.... +#.#......#.....##.......#..##.. +.#.#..........#....#......#.... +.....#.......#.##.....#......## +...#...#.##.............####... +..#....##...#...##..#.#..##.#.. +..#.........##.......###.#..... +..#.........#####..##...#...... +..#.#...#.......#.####......##. +......#.#.#....#......####....# +.###...........#...#..#..#..##. +..#...#..##.##...#.#.##.....#.. +.....#..#....##.......#...#.... +......#.....#.........#..#..#.. +...#..#.........##.....##.#...# +....##...#......#..#.....#..... +....#..#....#....#........##... +##.....#.......#.....#.#.#..#.. +.....#..##.....##.##.#......... +.#.#..##.............#.#....... +......#.##.#.....#.#......#..#. +..........#.#..#....#.#.#.#..## +...##.....#..#...#...#...##.... +........#.#......#..###..#..... +..#.##......#.......#.......#.. +...#....##.##.........#.#...... +......#....#.#.........#......# +.....#...#....#...#......#..#.. +.##...#......#.........#...#.#. +..#.#.#......#....#............ +..#.....##.............#.##.##. +#......#......#...##.......#.#. +##........#.....#.............. +.#.###.................#.#....# +........##.#..##........#.#.... +.......###...#...##.#..#....#.. +.#..#....#..#......##......#... +.#...#....#..........##..##.#.. +.#..###.......#............#... +...#.....###.#..#........#.#.#. +...#....#..#.##..........#.#.#. +.#..##..#.....#...........#.... +#...#...##....#..#....##....... +#..#......#................#... +#..##....#.#..#......#.#.#..... +##.#..#...#.....#.#...#......## +#....#.#.#....#.....##.....##.. +....#...##.#...####.#.#.#.#..#. +.....#.#....#..#.....#..#...... +.........#.#................... +........#.....####......#..#..# +.#.#.##.#...#.#......#...##.##. +.#......#.#.#...#..#.......#... +..#......#.##.##.#.#....#...... +..........#.#...###............ +.##..#..#.#.#..#.....#..#.#.... +......#.......#.#..#.#....#...# +.#.......###......#...#.#.#.... +.............##..#..#...#....#. +....#......#.#...#.#...#...#... +..#....#.......#.#..#..#.#..#.# +.#..#.#...#.....#.#...#####...# +.##............#....#.......... +#.......####...#.#.#........... +...#.......##.#..........#....# +..#.#......#.......##.....#..## +#......#.###..#......#......#.# +##....#..#....#.##....#..#..... +...##...#.#....#.#.......#..... +#...####....#..#.#..#.##....### +.....#..#..........###..#...... +.#..#..#...#....#.##..#..#..... +#..#.....#....#..#.##...##..... +.....###.#..#.......#...###.##. +#..#........#.#..#.#.........#. +....##........................# +.#....#.#.#.#.#...#......#....# +#....#...#.##.......#.#.###.... +..........###..##....#..##.#... +...##..###...#.#.#.......##...# +##.#...#..#.....###....#....... +..#..##....###........##....### +.....##..#...#..#.....#..#....# +#................#....#...#..## +#....#.#....#..###.#.#...#..#.# +........##.#...#.#.#.#...#..... +..#..###....#......##.#...##... +..#..##....#.##..#.....#.....#. +.#.#...#.....#..#..#......##.#. +........#.#...#..##....#..#.... +...##...#...#...#...##...##..#. +.......#..#..#....#.#..#...##.. +.#.....#.##........#...#.#..... +##.#..#....#.#....#.#....#...#. +..#.#......#.......##...#....#. +#.#..####..#........#.......### +....#.......#.......##.#...#.#. +..#..#.#.............#..#...... +........###.....##....#.......# +...#.....#...#...#....#.###.... +#...##.#........#..#...##..#..# +...##..#....#....#.#.#...#.#... +#......#.....#....###......##.. +.....#.........####...##..#.... +.......#...##...#..#..#.#...... +.#.#....#.....#.......#........ +...##...#....##..#.....###..... +.#....#........##......#....#.# +.........#.#.#.#...........#.#. +....#.#..##......#.#.#..##..... +.........#.....##....#......... +....#.............#...........# +...#..##........#.....###...... +#....#....#......#..#..#..#.#.. +#......##.....#..#....#..#.#... +#..............#....#.#....###. +..##..#..#...#...##........##.. +..#.##....#..#......###..#..... diff --git a/day03/lib.go b/day03/lib.go new file mode 100644 index 0000000..6b76523 --- /dev/null +++ b/day03/lib.go @@ -0,0 +1,20 @@ +package day03 + +func checkSlope(rows [][]byte, ySpeed int, xSpeed int) int { + rowLen := len(rows[0]) + key := 0 + counter := 0 + + for i := 0; i < len(rows); i += ySpeed { + // Check if this column on this row is a tree ASCII Char 35 (#) + // Use modulo to "wrap" the map. + if rows[i][key%rowLen] == 35 { + counter++ + } + + // Step right + key += xSpeed + } + + return counter +} diff --git a/day03/parse.go b/day03/parse.go new file mode 100644 index 0000000..2a4a9dc --- /dev/null +++ b/day03/parse.go @@ -0,0 +1,14 @@ +package day03 + +import ( + "git.elis.nu/etu/aoc2020/utils" +) + +var rows [][]byte + +func ParseFile(input string) { + // Parse file + for _, line := range utils.GetLinesFromFile("day03/" + input + ".txt") { + rows = append(rows, []byte(line)) + } +} diff --git a/day03/solve1.go b/day03/solve1.go new file mode 100644 index 0000000..19208a3 --- /dev/null +++ b/day03/solve1.go @@ -0,0 +1,9 @@ +package day03 + +import "log" + +func Solve1() { + trees := checkSlope(rows, 1, 3) + + log.Println("2020-12-03.01: Answer:", trees) +} diff --git a/day03/solve2.go b/day03/solve2.go new file mode 100644 index 0000000..72fb596 --- /dev/null +++ b/day03/solve2.go @@ -0,0 +1,13 @@ +package day03 + +import "log" + +func Solve2() { + trees := checkSlope(rows, 1, 1) * + checkSlope(rows, 1, 3) * + checkSlope(rows, 1, 5) * + checkSlope(rows, 1, 7) * + checkSlope(rows, 2, 1) + + log.Println("2020-12-03.02: Answer:", trees) +} diff --git a/main.go b/main.go index c61ca8b..67302c0 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "git.elis.nu/etu/aoc2020/day01" "git.elis.nu/etu/aoc2020/day02" + "git.elis.nu/etu/aoc2020/day03" "git.elis.nu/etu/aoc2020/utils" ) @@ -20,5 +21,8 @@ func main() { case "day02": utils.Perf("2020-12-02", day02.ParseFile, day02.Solve1, day02.Solve2) + + case "day03": + utils.Perf("2020-12-03", day03.ParseFile, day03.Solve1, day03.Solve2) } }