aoc_2024/2025/seven/seven.go

67 lines
916 B
Go
Raw Normal View History

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
}