2023 Day 18 Complete!
This commit is contained in:
63
2023/day18/main.go
Normal file
63
2023/day18/main.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
inp := h.StdinToStringSlice()
|
||||
part1(inp)
|
||||
fmt.Println()
|
||||
part2(inp)
|
||||
}
|
||||
|
||||
func part1(input []string) {
|
||||
dirMap := map[byte]h.Coordinate{
|
||||
'U': h.Coordinate{X: 0, Y: -1},
|
||||
'R': h.Coordinate{X: 1, Y: 0},
|
||||
'D': h.Coordinate{X: 0, Y: 1},
|
||||
'L': h.Coordinate{X: -1, Y: 0},
|
||||
}
|
||||
|
||||
curr, area := h.Coordinate{X: 0, Y: 0}, 0
|
||||
for i := range input {
|
||||
pts := strings.Fields(input[i])
|
||||
dir, length, _ := pts[0][0], h.Atoi(pts[1]), strings.Trim(pts[1], "()")
|
||||
n := curr.Add(dirMap[dir].Mul(length))
|
||||
area += curr.X*n.Y - curr.Y*n.X + length
|
||||
curr = n
|
||||
}
|
||||
fmt.Println("# Part 1")
|
||||
fmt.Println(area/2 + 1)
|
||||
}
|
||||
|
||||
func part2(input []string) {
|
||||
dirMap := map[byte]h.Coordinate{
|
||||
'3': h.Coordinate{X: 0, Y: -1},
|
||||
'0': h.Coordinate{X: 1, Y: 0},
|
||||
'1': h.Coordinate{X: 0, Y: 1},
|
||||
'2': h.Coordinate{X: -1, Y: 0},
|
||||
}
|
||||
|
||||
hexToDec := func(hex string) int {
|
||||
v, _ := strconv.ParseInt(hex, 16, strconv.IntSize)
|
||||
return int(v)
|
||||
}
|
||||
curr, area := h.Coordinate{X: 0, Y: 0}, 0
|
||||
for i := range input {
|
||||
pts := strings.Fields(input[i])
|
||||
pts[2] = strings.Trim(pts[2], "#()")
|
||||
length := hexToDec(pts[2][:len(pts[2])-1])
|
||||
dir := pts[2][len(pts[2])-1:][0]
|
||||
|
||||
n := curr.Add(dirMap[dir].Mul(length))
|
||||
area += curr.X*n.Y - curr.Y*n.X + length
|
||||
curr = n
|
||||
}
|
||||
fmt.Println("# Part 2")
|
||||
fmt.Println(area/2 + 1)
|
||||
}
|
||||
Reference in New Issue
Block a user