2025-12-07 20:27:32 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bufio"
|
|
|
|
|
"fmt"
|
|
|
|
|
"os"
|
|
|
|
|
"strings"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func check(err error) {
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type beams struct {
|
2025-12-07 20:59:01 +00:00
|
|
|
list map[int]int
|
2025-12-07 20:27:32 +00:00
|
|
|
}
|
|
|
|
|
|
2025-12-07 20:59:01 +00:00
|
|
|
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)
|
2025-12-07 20:27:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
2025-12-07 20:59:01 +00:00
|
|
|
file, err := os.Open("seven.txt")
|
2025-12-07 20:27:32 +00:00
|
|
|
check(err)
|
|
|
|
|
defer file.Close()
|
|
|
|
|
|
|
|
|
|
scanner := bufio.NewScanner(file)
|
|
|
|
|
scanner.Scan()
|
|
|
|
|
|
|
|
|
|
text := scanner.Text()
|
|
|
|
|
|
|
|
|
|
start := strings.IndexRune(text, 'S')
|
2025-12-07 20:59:01 +00:00
|
|
|
beamSet := make(map[int]int)
|
|
|
|
|
beamSet[start] = 1
|
2025-12-07 20:27:32 +00:00
|
|
|
|
|
|
|
|
for scanner.Scan() {
|
2025-12-07 20:59:01 +00:00
|
|
|
text := scanner.Text()
|
|
|
|
|
for beam, nways := range beamSet {
|
|
|
|
|
if text[beam] == '^' {
|
|
|
|
|
beamSet[beam-1] += nways
|
|
|
|
|
beamSet[beam+1] += nways
|
|
|
|
|
delete(beamSet, beam)
|
|
|
|
|
}
|
2025-12-07 20:27:32 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-07 20:59:01 +00:00
|
|
|
timelines := 0
|
|
|
|
|
for _, nways := range beamSet {
|
|
|
|
|
timelines += nways
|
2025-12-07 20:27:32 +00:00
|
|
|
}
|
|
|
|
|
|
2025-12-07 20:59:01 +00:00
|
|
|
fmt.Printf("N splits: %d\n", timelines)
|
2025-12-07 20:27:32 +00:00
|
|
|
}
|