re-organise repo
This commit is contained in:
89
2022/go/day08/day08.go
Normal file
89
2022/go/day08/day08.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package day08
|
||||
|
||||
import (
|
||||
_ "fmt"
|
||||
|
||||
"adventofcode2022/utils"
|
||||
"adventofcode2022/utils/inputs"
|
||||
"adventofcode2022/utils/grid2d"
|
||||
)
|
||||
|
||||
func Part1(input string) int {
|
||||
grid := inputs.ToGrid2D(input, "\n", "", -1, utils.MustAtoi)
|
||||
visible := grid2d.NewGrid(grid.SizeX(), grid.SizeY(), false)
|
||||
|
||||
for j := 0; j < grid.SizeY(); j++ {
|
||||
for i := 0; i < grid.SizeX(); i++ {
|
||||
directions := [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}
|
||||
for _, dir := range directions {
|
||||
v := true
|
||||
x := i
|
||||
y := j
|
||||
for {
|
||||
x += dir[0]
|
||||
y += dir[1]
|
||||
if x < 0 || x >= grid.SizeX() || y < 0 || y >= grid.SizeY() {
|
||||
break
|
||||
}
|
||||
if grid.Get(i, j) <= grid.Get(x, y) {
|
||||
v = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if v {
|
||||
visible.Set(i, j, true)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sum := 0
|
||||
for j := 0; j < visible.SizeY(); j++ {
|
||||
for i := 0; i < visible.SizeX(); i++ {
|
||||
if visible.Get(i, j) {
|
||||
sum++
|
||||
}
|
||||
}
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
func Part2(input string) int {
|
||||
grid := inputs.ToGrid2D(input, "\n", "", -1, utils.MustAtoi)
|
||||
scenicScore := grid2d.NewGrid(grid.SizeX(), grid.SizeY(), 1)
|
||||
|
||||
for j := 0; j < grid.SizeY(); j++ {
|
||||
for i := 0; i < grid.SizeX(); i++ {
|
||||
directions := [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}
|
||||
for _, dir := range directions {
|
||||
score := 0
|
||||
x := i
|
||||
y := j
|
||||
for {
|
||||
x += dir[0]
|
||||
y += dir[1]
|
||||
if x < 0 || x >= grid.SizeX() || y < 0 || y >= grid.SizeY() {
|
||||
break
|
||||
}
|
||||
if grid.Get(i, j) <= grid.Get(x, y) {
|
||||
score++
|
||||
break
|
||||
}
|
||||
score++
|
||||
}
|
||||
scenicScore.Set(i, j, scenicScore.Get(i,j) * score)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
max := 0
|
||||
for j := 0; j < scenicScore.SizeY(); j++ {
|
||||
for i := 0; i < scenicScore.SizeX(); i++ {
|
||||
if scenicScore.Get(i, j) > max {
|
||||
max = scenicScore.Get(i, j)
|
||||
}
|
||||
}
|
||||
}
|
||||
return max
|
||||
}
|
||||
Reference in New Issue
Block a user