aboutsummaryrefslogtreecommitdiff
path: root/2021/09/first_v2.go
diff options
context:
space:
mode:
Diffstat (limited to '2021/09/first_v2.go')
-rw-r--r--2021/09/first_v2.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/2021/09/first_v2.go b/2021/09/first_v2.go
new file mode 100644
index 0000000..0c11bcd
--- /dev/null
+++ b/2021/09/first_v2.go
@@ -0,0 +1,64 @@
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "os"
+)
+
+var (
+ grid [][]byte = make([][]byte, 0)
+ width, height int
+)
+
+func isMin(x, y int) bool {
+ var left, right, top, bottom byte
+ if x == 0 {
+ left = '9'
+ } else {
+ left = grid[x-1][y]
+ }
+ if x == height-1 {
+ right = '9'
+ } else {
+ right = grid[x+1][y]
+ }
+ if y == 0 {
+ top = '9'
+ } else {
+ top = grid[x][y-1]
+ }
+ if y == width-1 {
+ bottom = '9'
+ } else {
+ bottom = grid[x][y+1]
+ }
+ return grid[x][y] < top && grid[x][y] < bottom && grid[x][y] < left && grid[x][y] < right
+}
+
+func main() {
+ s := bufio.NewScanner(os.Stdin)
+ s.Scan()
+ width = len(s.Text())
+ for {
+ line := make([]byte, width)
+ for i, ch := range s.Text() {
+ line[i] = byte(ch)
+ }
+ grid = append(grid, line)
+ if !s.Scan() {
+ break
+ }
+ }
+ height = len(grid)
+
+ score := 0
+ for y := 0; y < width; y++ {
+ for x := 0; x < height; x++ {
+ if isMin(x, y) {
+ score += int(grid[x][y]-'0') + 1
+ }
+ }
+ }
+ fmt.Println(score)
+}