From a83808326691ec80e79dd5c5ed53b66532aceb6a Mon Sep 17 00:00:00 2001 From: Karl Spickermann Date: Sat, 11 Dec 2021 17:40:29 +0100 Subject: [PATCH] Day11 --- src/day11/day11.go | 96 +++++++++++++++++++++++++++++++++++++ src/day11/day11Input.txt | 10 ++++ src/day11/day11StepTest.txt | 5 ++ src/day11/day11Test.txt | 10 ++++ 4 files changed, 121 insertions(+) create mode 100644 src/day11/day11.go create mode 100644 src/day11/day11Input.txt create mode 100644 src/day11/day11StepTest.txt create mode 100644 src/day11/day11Test.txt diff --git a/src/day11/day11.go b/src/day11/day11.go new file mode 100644 index 0000000..b0a0172 --- /dev/null +++ b/src/day11/day11.go @@ -0,0 +1,96 @@ +package main + +import ( + "AOC2021/src/helper" + "fmt" + "os" +) + +type field struct { + energy int + flashed bool +} + +func main() { + args := os.Args[1:] + input, err := helper.GetInput(args[0]) + if err != nil { + fmt.Println(err) + } + energyMap := [10][10]field{} + for i, line := range input { + for j, r := range line { + energyMap[i][j] = field{int(r - '0'), false} + } + } + flashes := 0 + allFlashTogether := false + i := 0 + for !allFlashTogether { + stepflashes := step(&energyMap) + flashes += stepflashes + if stepflashes == 100 { + fmt.Printf("First Step, where all octuspuses flash simultaneously: %d \n", i + 1) + allFlashTogether = true + } + if i == 99 { + fmt.Printf("Flashes after 100 Steps: %d \n", flashes) + } + i++ + } +} + +func step(energyMap *[10][10]field) int{ + flashes := 0 + for i, _ := range energyMap { + for j, _ := range energyMap[i] { + energyMap[i][j].energy++ + } + } + for i, _ := range energyMap { + for j, _ := range energyMap[i] { + if energyMap[i][j].energy > 9 { + flash(energyMap, j, i) + } + } + } + for i, _ := range energyMap { + for j, _ := range energyMap[i] { + if energyMap[i][j].flashed { + energyMap[i][j].energy = 0 + flashes++ + energyMap[i][j].flashed = false + } + } + } + return flashes +} + +func flash(energyMap *[10][10]field, x int, y int) { + if energyMap[y][x].flashed == true { + return + } + energyMap[y][x].flashed = true + directions := [8][2]int{{-1, -1}, {0, -1}, {1, -1}, {+1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}} + for _, direction := range directions { + px := x + direction[0] + py := y + direction[1] + if py < len(energyMap) && py >= 0 && px < len(energyMap[0]) && px >= 0 { + energyMap[py][px].energy++ + if energyMap[py][px].energy > 9 { + flash(energyMap, px, py) + } + } + } +} + +func printMap(energyMap *[10][10]field) { + for _, line := range energyMap { + lineArray := [10]int{} + for i, field := range line { + lineArray[i] = field.energy + } + fmt.Println(lineArray) + } + +} diff --git a/src/day11/day11Input.txt b/src/day11/day11Input.txt new file mode 100644 index 0000000..dfa8b6e --- /dev/null +++ b/src/day11/day11Input.txt @@ -0,0 +1,10 @@ +2138862165 +2726378448 +3235172758 +6281242643 +4256223158 +1112268142 +1162836182 +1543525861 +1882656326 +8844263151 \ No newline at end of file diff --git a/src/day11/day11StepTest.txt b/src/day11/day11StepTest.txt new file mode 100644 index 0000000..e282ad7 --- /dev/null +++ b/src/day11/day11StepTest.txt @@ -0,0 +1,5 @@ +11111 +19991 +19191 +19991 +11111 \ No newline at end of file diff --git a/src/day11/day11Test.txt b/src/day11/day11Test.txt new file mode 100644 index 0000000..a3819c9 --- /dev/null +++ b/src/day11/day11Test.txt @@ -0,0 +1,10 @@ +5483143223 +2745854711 +5264556173 +6141336146 +6357385478 +4167524645 +2176841721 +6882881134 +4846848554 +5283751526 \ No newline at end of file