Solve seven
This commit is contained in:
parent
7d8df0db21
commit
909ff098c7
1 changed files with 27 additions and 31 deletions
|
|
@ -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() {
|
||||
}
|
||||
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
|
||||
text := scanner.Text()
|
||||
for beam, nways := range beamSet {
|
||||
if text[beam] == '^' {
|
||||
beamSet[beam-1] += nways
|
||||
beamSet[beam+1] += nways
|
||||
delete(beamSet, beam)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue