50 lines
878 B
Go
50 lines
878 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
|
)
|
|
|
|
func main() {
|
|
inp := h.StdinToStringSlice()
|
|
part1(inp)
|
|
part2(inp)
|
|
}
|
|
|
|
func part1(inp []string) {
|
|
var movable int
|
|
m := h.StringSliceToCoordByteMap(inp)
|
|
for c := range m.Field {
|
|
if m.Field[c] != '@' {
|
|
continue
|
|
}
|
|
if len(m.FindAdjacent(c, '@')) < 4 {
|
|
movable++
|
|
}
|
|
}
|
|
fmt.Println("# Part 1")
|
|
fmt.Println("Movable Rolls:",movable)
|
|
}
|
|
|
|
|
|
func part2(inp []string) {
|
|
var movable int
|
|
m := h.StringSliceToCoordByteMap(inp)
|
|
rolls := m.FindAll('@')
|
|
rollCnt := len(rolls)
|
|
prevRollCnt := 0
|
|
for rollCnt != prevRollCnt {
|
|
prevRollCnt = rollCnt
|
|
for i := range rolls {
|
|
if len(m.FindAdjacent(rolls[i], '@')) < 4 {
|
|
m.Put(rolls[i], '.')
|
|
movable++
|
|
}
|
|
}
|
|
rolls = m.FindAll('@')
|
|
rollCnt = len(rolls)
|
|
}
|
|
fmt.Println("# Part 2")
|
|
fmt.Println("Movable Rolls:",movable)
|
|
}
|