2021 Day 25 Complete
This commit is contained in:
74
2021/day25/main.go
Normal file
74
2021/day25/main.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("vim-go")
|
||||
inp := h.StdinToStringSlice()
|
||||
field := h.StringSliceToCoordByteMap(inp)
|
||||
part1(field)
|
||||
}
|
||||
|
||||
func part1(f h.CoordByteMap) {
|
||||
// Run until no cucumbers move
|
||||
var steps int
|
||||
var done bool
|
||||
for !done {
|
||||
east := f.FindAll('>')
|
||||
eastMovers := make(map[h.Coordinate]h.Coordinate)
|
||||
for i := range east {
|
||||
var check h.Coordinate
|
||||
if east[i].X == f.BRX {
|
||||
check = h.Coordinate{
|
||||
X: f.TLX,
|
||||
Y: east[i].Y,
|
||||
}
|
||||
} else {
|
||||
check = east[i].East()
|
||||
}
|
||||
if f.Get(check) == '.' {
|
||||
eastMovers[east[i]] = check
|
||||
}
|
||||
}
|
||||
if len(eastMovers) == 0 {
|
||||
done = true
|
||||
} else {
|
||||
for k, v := range eastMovers {
|
||||
f.Put(k, '.')
|
||||
f.Put(v, '>')
|
||||
}
|
||||
}
|
||||
|
||||
south := f.FindAll('v')
|
||||
southMovers := make(map[h.Coordinate]h.Coordinate)
|
||||
for i := range south {
|
||||
var check h.Coordinate
|
||||
if south[i].Y == f.BRY {
|
||||
check = h.Coordinate{
|
||||
X: south[i].X,
|
||||
Y: f.TLY,
|
||||
}
|
||||
} else {
|
||||
check = south[i].South()
|
||||
}
|
||||
if f.Get(check) == '.' {
|
||||
southMovers[south[i]] = check
|
||||
}
|
||||
}
|
||||
if len(southMovers) == 0 {
|
||||
done = done && true
|
||||
} else {
|
||||
for k, v := range southMovers {
|
||||
f.Put(k, '.')
|
||||
f.Put(v, 'v')
|
||||
}
|
||||
}
|
||||
steps++
|
||||
}
|
||||
fmt.Println("# Part 1")
|
||||
fmt.Println("Stable after", steps, "steps")
|
||||
}
|
||||
Reference in New Issue
Block a user