]> fbox.kageds.com Git - adventofcode.git/blob - 2022/go/day08/day08.go
Day_1
[adventofcode.git] / 2022 / go / day08 / day08.go
1 package day08
2
3 import (
4 _ "fmt"
5
6 "adventofcode2022/utils"
7 "adventofcode2022/utils/inputs"
8 "adventofcode2022/utils/grid2d"
9 )
10
11 func Part1(input string) int {
12 grid := inputs.ToGrid2D(input, "\n", "", -1, utils.MustAtoi)
13 visible := grid2d.NewGrid(grid.SizeX(), grid.SizeY(), false)
14
15 for j := 0; j < grid.SizeY(); j++ {
16 for i := 0; i < grid.SizeX(); i++ {
17 directions := [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}
18 for _, dir := range directions {
19 v := true
20 x := i
21 y := j
22 for {
23 x += dir[0]
24 y += dir[1]
25 if x < 0 || x >= grid.SizeX() || y < 0 || y >= grid.SizeY() {
26 break
27 }
28 if grid.Get(i, j) <= grid.Get(x, y) {
29 v = false
30 break
31 }
32 }
33 if v {
34 visible.Set(i, j, true)
35 break
36 }
37 }
38 }
39 }
40
41 sum := 0
42 for j := 0; j < visible.SizeY(); j++ {
43 for i := 0; i < visible.SizeX(); i++ {
44 if visible.Get(i, j) {
45 sum++
46 }
47 }
48 }
49 return sum
50 }
51
52 func Part2(input string) int {
53 grid := inputs.ToGrid2D(input, "\n", "", -1, utils.MustAtoi)
54 scenicScore := grid2d.NewGrid(grid.SizeX(), grid.SizeY(), 1)
55
56 for j := 0; j < grid.SizeY(); j++ {
57 for i := 0; i < grid.SizeX(); i++ {
58 directions := [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}
59 for _, dir := range directions {
60 score := 0
61 x := i
62 y := j
63 for {
64 x += dir[0]
65 y += dir[1]
66 if x < 0 || x >= grid.SizeX() || y < 0 || y >= grid.SizeY() {
67 break
68 }
69 if grid.Get(i, j) <= grid.Get(x, y) {
70 score++
71 break
72 }
73 score++
74 }
75 scenicScore.Set(i, j, scenicScore.Get(i,j) * score)
76 }
77 }
78 }
79
80 max := 0
81 for j := 0; j < scenicScore.SizeY(); j++ {
82 for i := 0; i < scenicScore.SizeX(); i++ {
83 if scenicScore.Get(i, j) > max {
84 max = scenicScore.Get(i, j)
85 }
86 }
87 }
88 return max
89 }