aboutsummaryrefslogtreecommitdiff
path: root/2021/11
diff options
context:
space:
mode:
Diffstat (limited to '2021/11')
-rw-r--r--2021/11/example10
-rw-r--r--2021/11/first.go57
-rw-r--r--2021/11/input10
-rw-r--r--2021/11/second.go63
4 files changed, 140 insertions, 0 deletions
diff --git a/2021/11/example b/2021/11/example
new file mode 100644
index 0000000..03743f6
--- /dev/null
+++ b/2021/11/example
@@ -0,0 +1,10 @@
+5483143223
+2745854711
+5264556173
+6141336146
+6357385478
+4167524645
+2176841721
+6882881134
+4846848554
+5283751526
diff --git a/2021/11/first.go b/2021/11/first.go
new file mode 100644
index 0000000..28428e4
--- /dev/null
+++ b/2021/11/first.go
@@ -0,0 +1,57 @@
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "os"
+)
+
+var (
+ grid = make([][]byte, 0)
+ score = 0
+)
+
+func powerup(x, y int) {
+ if x < 0 || x > 9 || y < 0 || y > 9 || grid[x][y] > 9 {
+ return
+ }
+ grid[x][y]++
+ if grid[x][y] > 9 {
+ score++
+ powerup(x-1, y-1)
+ powerup(x, y-1)
+ powerup(x+1, y-1)
+ powerup(x-1, y)
+ powerup(x+1, y)
+ powerup(x-1, y+1)
+ powerup(x, y+1)
+ powerup(x+1, y+1)
+ }
+}
+func main() {
+ scanner := bufio.NewScanner(os.Stdin)
+ for scanner.Scan() {
+ line := scanner.Text()
+ l := make([]byte, len(line))
+ for i := 0; i < len(line); i++ {
+ l[i] = line[i] - '0'
+ }
+ grid = append(grid, l)
+ }
+
+ for i := 0; i < 100; i++ {
+ for y := 0; y < 10; y++ {
+ for x := 0; x < 10; x++ {
+ powerup(x, y)
+ }
+ }
+ for y := 0; y < 10; y++ {
+ for x := 0; x < 10; x++ {
+ if grid[x][y] > 9 {
+ grid[x][y] = 0
+ }
+ }
+ }
+ }
+ fmt.Println(score)
+}
diff --git a/2021/11/input b/2021/11/input
new file mode 100644
index 0000000..e3a6f6b
--- /dev/null
+++ b/2021/11/input
@@ -0,0 +1,10 @@
+8448854321
+4447645251
+6542573645
+4725275268
+6442514153
+4515734868
+5513676158
+3257376185
+2172424467
+6775163586
diff --git a/2021/11/second.go b/2021/11/second.go
new file mode 100644
index 0000000..34e9971
--- /dev/null
+++ b/2021/11/second.go
@@ -0,0 +1,63 @@
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "os"
+)
+
+var (
+ grid = make([][]byte, 0)
+ score = 0
+)
+
+func powerup(x, y int) {
+ if x < 0 || x > 9 || y < 0 || y > 9 || grid[x][y] > 9 {
+ return
+ }
+ grid[x][y]++
+ if grid[x][y] > 9 {
+ score++
+ powerup(x-1, y-1)
+ powerup(x, y-1)
+ powerup(x+1, y-1)
+ powerup(x-1, y)
+ powerup(x+1, y)
+ powerup(x-1, y+1)
+ powerup(x, y+1)
+ powerup(x+1, y+1)
+ }
+}
+func main() {
+ scanner := bufio.NewScanner(os.Stdin)
+ for scanner.Scan() {
+ line := scanner.Text()
+ l := make([]byte, len(line))
+ for i := 0; i < len(line); i++ {
+ l[i] = line[i] - '0'
+ }
+ grid = append(grid, l)
+ }
+
+ i := 0
+ for {
+ score = 0
+ for y := 0; y < 10; y++ {
+ for x := 0; x < 10; x++ {
+ powerup(x, y)
+ }
+ }
+ for y := 0; y < 10; y++ {
+ for x := 0; x < 10; x++ {
+ if grid[x][y] > 9 {
+ grid[x][y] = 0
+ }
+ }
+ }
+ i++
+ if score == 100 {
+ break
+ }
+ }
+ fmt.Println(i)
+}