Day11
This commit is contained in:
parent
4b333ecefd
commit
a838083266
|
@ -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)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
2138862165
|
||||||
|
2726378448
|
||||||
|
3235172758
|
||||||
|
6281242643
|
||||||
|
4256223158
|
||||||
|
1112268142
|
||||||
|
1162836182
|
||||||
|
1543525861
|
||||||
|
1882656326
|
||||||
|
8844263151
|
|
@ -0,0 +1,5 @@
|
||||||
|
11111
|
||||||
|
19991
|
||||||
|
19191
|
||||||
|
19991
|
||||||
|
11111
|
|
@ -0,0 +1,10 @@
|
||||||
|
5483143223
|
||||||
|
2745854711
|
||||||
|
5264556173
|
||||||
|
6141336146
|
||||||
|
6357385478
|
||||||
|
4167524645
|
||||||
|
2176841721
|
||||||
|
6882881134
|
||||||
|
4846848554
|
||||||
|
5283751526
|
Loading…
Reference in New Issue
Block a user