From 44b8be5a9e34c0227556a70041dea28d208a338e Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Sun, 24 Oct 2021 20:59:45 +0200 Subject: [PATCH] day18 --- day18/day.go | 41 +++++++++++++++++++++++++++++++++++++++++ inputs/18 | 1 + inputs/18_test | 1 + main.go | 3 ++- 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 day18/day.go create mode 100644 inputs/18 create mode 100644 inputs/18_test diff --git a/day18/day.go b/day18/day.go new file mode 100644 index 0000000..204e33a --- /dev/null +++ b/day18/day.go @@ -0,0 +1,41 @@ +package day18 + +import ( + "tools" +) + +func getGridFromInput(inp string) tools.GridToggle { + grid := tools.NewGridToggle() + for i, c := range inp { + grid.Set(i, 0, c == '^') + } + return grid +} + +func calcTraps(grid tools.GridToggle, cols, rows int) tools.GridToggle { + for row := 1; row < rows; row++ { + for x := 0; x < cols; x++ { + grid.Set(x, row, + (grid.State(x-1, row-1) && grid.State(x, row-1) && !grid.State(x+1, row-1)) || + (!grid.State(x-1, row-1) && grid.State(x, row-1) && grid.State(x+1, row-1)) || + (grid.State(x-1, row-1) && !grid.State(x, row-1) && !grid.State(x+1, row-1)) || + (!grid.State(x-1, row-1) && !grid.State(x, row-1) && grid.State(x+1, row-1))) + } + } + + return grid +} + +func Part1(puzzle tools.AoCPuzzle) interface{} { + inp := puzzle.GetInputString() + width := len(inp) + field := calcTraps(getGridFromInput(inp), width, 40) + return (field.MaxX+1)*(field.MaxY+1) - field.GetOnCount() +} + +func Part2(puzzle tools.AoCPuzzle) interface{} { + inp := puzzle.GetInputString() + width := len(inp) + field := calcTraps(getGridFromInput(inp), width, 400000) + return (field.MaxX+1)*(field.MaxY+1) - field.GetOnCount() +} diff --git a/inputs/18 b/inputs/18 new file mode 100644 index 0000000..a86a628 --- /dev/null +++ b/inputs/18 @@ -0,0 +1 @@ +^.^^^.^..^....^^....^^^^.^^.^...^^.^.^^.^^.^^..^.^...^.^..^.^^.^..^.....^^^.^.^^^..^^...^^^...^...^. \ No newline at end of file diff --git a/inputs/18_test b/inputs/18_test new file mode 100644 index 0000000..235ef50 --- /dev/null +++ b/inputs/18_test @@ -0,0 +1 @@ +.^^.^.^^^^ \ No newline at end of file diff --git a/main.go b/main.go index 1101620..f804b3f 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,7 @@ import ( "aoc2016/day15" "aoc2016/day16" "aoc2016/day17" + "aoc2016/day18" "flag" "fmt" "os" @@ -51,7 +52,7 @@ func initDayFunctions() { 15: {1: day15.Part1, 2: day15.Part2}, 16: {1: day16.Part1, 2: day16.Part2}, 17: {1: day17.Part1, 2: day17.Part2}, - // 18: {1: day18.Part1, 2: day18.Part2}, + 18: {1: day18.Part1, 2: day18.Part2}, // 19: {1: day19.Part1, 2: day19.Part2}, // 20: {1: day20.Part1, 2: day20.Part2}, // 21: {1: day21.Part1, 2: day21.Part2},