adventofcode/2021/day25/main.go

75 lines
1.3 KiB
Go

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")
}