package main import ( "bufio" "fmt" "os" "strings" ) func check(err error) { if err != nil { panic(err) } } type beams struct { list map[int]int } func newBeams() beams { var b beams b.list = make(map[int]int) return b } func (b *beams) add(pos int) { b.list[pos]++ } func (b *beams) del(pos int) { delete(b.list, pos) } func main() { file, err := os.Open("seven.txt") check(err) defer file.Close() scanner := bufio.NewScanner(file) scanner.Scan() text := scanner.Text() start := strings.IndexRune(text, 'S') beamSet := make(map[int]int) beamSet[start] = 1 for scanner.Scan() { text := scanner.Text() for beam, nways := range beamSet { if text[beam] == '^' { beamSet[beam-1] += nways beamSet[beam+1] += nways delete(beamSet, beam) } } } timelines := 0 for _, nways := range beamSet { timelines += nways } fmt.Printf("N splits: %d\n", timelines) }