Solve seven

This commit is contained in:
Maximilian Friedersdorff 2025-12-07 20:59:01 +00:00
parent 7d8df0db21
commit 909ff098c7

View file

@ -2,10 +2,8 @@ package main
import (
"bufio"
"errors"
"fmt"
"os"
"strconv"
"strings"
)
@ -15,18 +13,27 @@ func check(err error) {
}
}
type beam int
type beams struct {
b map[beam]struct{}
list map[int]int
}
func (b *beams) add(pos beam) {
b.b[pos] = {}
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("five.txt")
file, err := os.Open("seven.txt")
check(err)
defer file.Close()
@ -36,35 +43,24 @@ func main() {
text := scanner.Text()
start := strings.IndexRune(text, 'S')
beams.add(beam(start))
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)
}
db, err := parse(scanner)
check(err)
nRaw := len(db.ranges)
for {
before, after := db.collapse()
fmt.Printf("Collapsed %d to %d ranges\n", before, after)
if before == after {
break
}
}
potentialNFresh := 0
for _, r := range db.ranges {
potentialNFresh += r.nInRange()
timelines := 0
for _, nways := range beamSet {
timelines += nways
}
fmt.Printf(
"N raw %d and consolidated %d. %d potential fresh ingredients.\n",
nRaw,
len(db.ranges),
potentialNFresh,
)
fmt.Printf("N splits: %d\n", timelines)
}