75 lines
1.3 KiB
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")
|
|
}
|