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