day7
This commit is contained in:
parent
40837caa9e
commit
825f608c04
3 changed files with 264 additions and 0 deletions
16
day7/input0.txt
Normal file
16
day7/input0.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
.......S.......
|
||||
...............
|
||||
.......^.......
|
||||
...............
|
||||
......^.^......
|
||||
...............
|
||||
.....^.^.^.....
|
||||
...............
|
||||
....^.^...^....
|
||||
...............
|
||||
...^.^...^.^...
|
||||
...............
|
||||
..^...^.....^..
|
||||
...............
|
||||
.^.^.^.^.^...^.
|
||||
...............
|
||||
142
day7/input1.txt
Normal file
142
day7/input1.txt
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
......................................................................S......................................................................
|
||||
.............................................................................................................................................
|
||||
......................................................................^......................................................................
|
||||
.............................................................................................................................................
|
||||
.....................................................................^.^.....................................................................
|
||||
.............................................................................................................................................
|
||||
....................................................................^...^....................................................................
|
||||
.............................................................................................................................................
|
||||
...................................................................^.....^...................................................................
|
||||
.............................................................................................................................................
|
||||
..................................................................^...^...^..................................................................
|
||||
.............................................................................................................................................
|
||||
.................................................................^.^...^.^.^.................................................................
|
||||
.............................................................................................................................................
|
||||
................................................................^.^.......^.^................................................................
|
||||
.............................................................................................................................................
|
||||
...............................................................^...^...^.^.^.^...............................................................
|
||||
.............................................................................................................................................
|
||||
..............................................................^.^.^...^.......^..............................................................
|
||||
.............................................................................................................................................
|
||||
.............................................................^...^.^.^.^...^.^.^.............................................................
|
||||
.............................................................................................................................................
|
||||
............................................................^.^.^.^...^.......^.^............................................................
|
||||
.............................................................................................................................................
|
||||
...........................................................^.^.^.^.^.^.^.^.^...^.^...........................................................
|
||||
.............................................................................................................................................
|
||||
..........................................................^.....^.^.^.^.^.....^...^..........................................................
|
||||
.............................................................................................................................................
|
||||
.........................................................^.^.....^.^.^.^.^...^.^.^.^.........................................................
|
||||
.............................................................................................................................................
|
||||
........................................................^.^.^.^.^.^.^.^...^...^.....^........................................................
|
||||
.............................................................................................................................................
|
||||
.......................................................^.^.^.^.^.^.^.......^...^.....^.......................................................
|
||||
.............................................................................................................................................
|
||||
......................................................^.^.^.^...^.^.....^.^.^.^.^...^.^......................................................
|
||||
.............................................................................................................................................
|
||||
.....................................................^.^.^.^.^.^.^.....^.....^...^.^.^.^.....................................................
|
||||
.............................................................................................................................................
|
||||
....................................................^.^...^.^.......^.^.^.......^...^.^.^....................................................
|
||||
.............................................................................................................................................
|
||||
...................................................^...^.^...^...^.^.^.^.^...^...^.^.....^...................................................
|
||||
.............................................................................................................................................
|
||||
..................................................^.....^...^.^.^.....^...^.^...^.......^.^..................................................
|
||||
.............................................................................................................................................
|
||||
.................................................^.^.^.^.^.^.^.^...^.^.^.^.^.....^.^...^.^.^.................................................
|
||||
.............................................................................................................................................
|
||||
................................................^.^...^.^.....^.^.....^...^.^.^.....^.^...^.^................................................
|
||||
.............................................................................................................................................
|
||||
...............................................^.........^.^.^.^.^.^.^.^...^.^.^.^...........^...............................................
|
||||
.............................................................................................................................................
|
||||
..............................................^.^.......^...^...^...^...^.^.^.^.^.^.^.^.^.^.^.^..............................................
|
||||
.............................................................................................................................................
|
||||
.............................................^.........^.^.^.^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.............................................
|
||||
.............................................................................................................................................
|
||||
............................................^.^...^...^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^............................................
|
||||
.............................................................................................................................................
|
||||
...........................................^.^.^.^...^.^.^.^.^.^.....^.^.^.^.^.^.^...^.^.^.^.^...^...........................................
|
||||
.............................................................................................................................................
|
||||
..........................................^.....^.^.......^.^.^.^.^.^.^.....^.^.^.^.....^.^.^.^.^.^..........................................
|
||||
.............................................................................................................................................
|
||||
.........................................^.....^.^.^.^.^.^.^...^.^.^.....^.....^.^.....^.^.......^.^.........................................
|
||||
.............................................................................................................................................
|
||||
........................................^.^...^.^.^.^...^...^.^.^.^.^...^.^.^.^...^.....^.^.^...^...^........................................
|
||||
.............................................................................................................................................
|
||||
.......................................^.^.^.^.^.......^...^.^.^.^...^...^.^.^...^...^.^.^...........^.......................................
|
||||
.............................................................................................................................................
|
||||
......................................^.^...^.^.^.^...^...^.^.^.........^.^.^.^...^.^.^.^...^...^.....^......................................
|
||||
.............................................................................................................................................
|
||||
.....................................^.........^.^.^.^.^.^...^.........^.^.^.^.^.^.^.^.^...^.^.^...^...^.....................................
|
||||
.............................................................................................................................................
|
||||
....................................^.^.^...^.^.^.....^.^.^.^.^.....^.^.^...^...^...^.^.^.^...^...^...^.^....................................
|
||||
.............................................................................................................................................
|
||||
...................................^...^.^.^.^.^...^...^...^...^.^.^.^.^...^.^.^...^...^.^.^.........^.^.^...................................
|
||||
.............................................................................................................................................
|
||||
..................................^.^.^.^...^.^.....^.^.^.^.^...^...^.^.^.^.....^...^...^.^...^.^...^.^...^..................................
|
||||
.............................................................................................................................................
|
||||
.................................^...^.^.^.^.^.^...^.^.^.^.^.^.^.^.......^...^.^.^.......^...^.^.^.^.^.^.^.^.................................
|
||||
.............................................................................................................................................
|
||||
................................^.^.^...^.^...^.^...^.^.^.^...^.^...^.^.^.^.....^.....^.^.^.^.^.......^...^.^................................
|
||||
.............................................................................................................................................
|
||||
...............................^.^.^...^.^.^...^.^.^.^.^.^.....^.^.^.^...^.^.^.^.^.^.^.....^.^.^.^.....^.....^...............................
|
||||
.............................................................................................................................................
|
||||
..............................^.^...^.^.^.^.^.^...^.^.^.^...^.^.^...^.^...^.^...^.^.^.^...^.^.....^.^.^.....^.^..............................
|
||||
.............................................................................................................................................
|
||||
.............................^.^.^.^.^...^.^.^.^.^...^...^.^.^.^.^.........^.^.^...^.^...^.^...^.^.^...^...^.^.^.............................
|
||||
.............................................................................................................................................
|
||||
............................^...^.^...^.^...^.^.^.^...^.^.^.^.^...^.^.......^.^.^.^...^.^...^.^.^...^.^.........^............................
|
||||
.............................................................................................................................................
|
||||
...........................^.^.^...^.^.^.^...^.^.^.....^.^.^.^.......^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^...^.^...........................
|
||||
.............................................................................................................................................
|
||||
..........................^.^...^...^.^.^...^.^.^.^.^.^.^.^...^.^.^.^...^.^.^.^.^.^...^...^.^.^.^...^.^.^.^.^...^.^..........................
|
||||
.............................................................................................................................................
|
||||
.........................^.^.^...^.^.^...^.^.^.^.....^.^...^...^.^...^.^.....^...^.^.^.^.^.^.^.....^.^.^.......^...^.........................
|
||||
.............................................................................................................................................
|
||||
........................^...^.^.^.^.^.^...^.^...^.^...^.^.........^.^.....^.^.^...........^...^.^.^.^...^.^.^.^.^.^.^........................
|
||||
.............................................................................................................................................
|
||||
.......................^.^.^.....^.^.^.....^.^.^.^.^.^...^.^.^...^.^.^.^.^...^.....^.^...^.^.^...^.^.^.^...^.^.^.^.^.^.......................
|
||||
.............................................................................................................................................
|
||||
......................^.^.^.^.^.^...^...^.^.......^...^.^...^.^...^.^.^.^.^.^.^...^.....^...^...^...^.^...^.^...^.^.^.^......................
|
||||
.............................................................................................................................................
|
||||
.....................^.^...^.^.^.^.^...^.^.^...^.^.^.^...^...^.^.^...^.....^.^.^.^.^.^.^.^.....^.^.^.^.^.^.^.^.^...^.^.^.....................
|
||||
.............................................................................................................................................
|
||||
....................^...^.^.^.^.^.....^.^.^.......^.^.^.^.^.^.^.^.......^...^...^.^.....^.....^...^.^...^.^.^.^.^.^.^...^....................
|
||||
.............................................................................................................................................
|
||||
...................^.^...^.^.^.^.^.^.^.^.............^.........^.^.^...^...^...^.^.........^.^.....^.^...^.....^.^.^.^...^...................
|
||||
.............................................................................................................................................
|
||||
..................^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.....^...^.^.^.^.........^.^...^...^.^.......^.....^.^.^.....^.^...^..................
|
||||
.............................................................................................................................................
|
||||
.................^.^.^...^...^.^.^.^.^.^.^.^.^.^...^...^.^...^.^.^.^...^.^.^.^.^.^.^...^.^.......^.^...^.^.........^...^.^.^.................
|
||||
.............................................................................................................................................
|
||||
................^.^.^.....^...^.^...^.^.^.^.^.^...^.^...^.^.^.^.^.^.....^.^.^.^.^.....^...^.....^.^.^.....^.^.^.^.^...^.^...^................
|
||||
.............................................................................................................................................
|
||||
...............^.^.....^.^...^...^...^.^.^.......^...^.^...^.^.^...^.^.^.......^.^...^.^.^...^...^.^.....^...^...^.^.....^...^...............
|
||||
.............................................................................................................................................
|
||||
..............^.^.^.....^.^.^.^.^...^...^.^...^...^.^.^.....^...^.^.^.^.^...^.^.^.^.......^.^.....^...^.^...^.^.^...^.^.^...^.^..............
|
||||
.............................................................................................................................................
|
||||
.............^.^.^.^.^.....^.^...^.^...^...^.^.^...^.^.^...^...^.^.^.^.^...^.^.^.^.^.^.^.^...^.^.^.^.^...^...^.^.^.^...^.....^.^.............
|
||||
.............................................................................................................................................
|
||||
............^.^.^...^.......^.^...^.^.^.......^.^...^.^.^...^.^.^...........^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.......^.^.^.^.^.^.^.^............
|
||||
.............................................................................................................................................
|
||||
...........^.....^.^...^...^.^...^...^...^.^.^...^...^...^.^.^...^.....^...^...^...^.....^...^.....^.^.^...^.^.^...^.^...^.^.^.^.^...........
|
||||
.............................................................................................................................................
|
||||
..........^.^.^.^.^.......^.^.^.^.^.^.....^.....^.^...^.^.^...^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^.^...^.^.....^...^.^.^..........
|
||||
.............................................................................................................................................
|
||||
.........^...^.^.^...^.^.^.^.^.....^...^...^.^.^...^.^.^...^...^.^.^...^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^...^.....^.^.^.......^.^.^.^.........
|
||||
.............................................................................................................................................
|
||||
........^.^.^.^.^.^.^.....^.^.^.^.^.^.^.^.......^.^.^.^.^.^.^...^.^.^.....^...^.^.....^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.....^.^........
|
||||
.............................................................................................................................................
|
||||
.......^.^.......^.^.^.^.^.^.^...^.^.^.^.......^.....^...^.^.^.^.^.^.^.^...^.^...^...^.^.....^.^.....^...^.^.......^...^.^.^.^.^.^...^.......
|
||||
.............................................................................................................................................
|
||||
......^.^...^...^.^.^...^...^.^.^.^.^.^...^.^...^.....^.^.^.^.......^...^...^.^.....^.^.^.....^.^...^.^.....^.^.^.^.^.....^.....^.....^......
|
||||
.............................................................................................................................................
|
||||
.....^.^.^.^.....^.^.^.^.^.^.^...^.^.....^.^.^.....^.^.........^.^...^.^.....^...^.^.^.^.^.......^.^.....^.....^.^.^.^.^.^.^.....^.^...^.....
|
||||
.............................................................................................................................................
|
||||
....^...^.....^.^...^...^.^.^.........^.^.^.^.^.^.^.^.^.^.^.^...^.^.....^.....^.^.^.....^.^.^.^.^.^.....^.^.^.^.^...^.^.^.^...^.^.^.^...^....
|
||||
.............................................................................................................................................
|
||||
...^.....^.^.^.^...^.^.^.^.^.^.^...^.^.......^.^...^...^.^...^.^.^.......^.^.^.^.^.^.^.^.^...^.^.^.^...^.^.....^.^.^.^.^...^.^.^...^.^.^.^...
|
||||
.............................................................................................................................................
|
||||
..^.^.^.^...^.^.^.^.^...^.^.^.^.....^.^...^...^.^.^.^.....^.^.^.....^.^...^.^.^...^.^.^.........^.........................^.^.^.^.^.^...^.^..
|
||||
.............................................................................................................................................
|
||||
.^.^.....^.^.^.^.^.^.^...^.^.^...^.^...^.^.^.^...^.....^.^...^.^...^.^.^.^.....^...^.^...^...^.^.^.....^.^...^.^...^...^.^.^.^.^.^.^...^.^.^.
|
||||
.............................................................................................................................................
|
||||
106
day7/main.go
Normal file
106
day7/main.go
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/kelindar/bitmap"
|
||||
)
|
||||
|
||||
func readLines(filename string) []string {
|
||||
raw, err := os.ReadFile(filename)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return strings.Split(string(raw), "\n")
|
||||
}
|
||||
|
||||
func main() {
|
||||
filename := "input0.txt"
|
||||
if len(os.Args) > 1 {
|
||||
filename = os.Args[1]
|
||||
}
|
||||
lines := readLines(filename)
|
||||
m := parseManifold(lines)
|
||||
_, splits := m.eval()
|
||||
fmt.Printf("%v\n", splits)
|
||||
fmt.Printf("%v\n", m.quantumEval())
|
||||
}
|
||||
|
||||
type manifold struct {
|
||||
width uint32
|
||||
source bitmap.Bitmap
|
||||
splitters []bitmap.Bitmap
|
||||
}
|
||||
|
||||
func (m *manifold) eval() (bitmap.Bitmap, uint64) {
|
||||
splits := uint64(0)
|
||||
active := m.source.Clone(nil)
|
||||
for _, splitter := range m.splitters {
|
||||
activated := active.Clone(nil)
|
||||
activated.And(splitter)
|
||||
var produced bitmap.Bitmap
|
||||
activated.Range(func(i uint32) {
|
||||
splits++
|
||||
produced.Set(i - 1)
|
||||
produced.Set(i + 1)
|
||||
})
|
||||
active.AndNot(activated)
|
||||
active.Or(produced)
|
||||
}
|
||||
return active, splits
|
||||
}
|
||||
|
||||
// set expansion is just too slow
|
||||
// instead, work like eval but use a slice of uints where the
|
||||
// values are the number of timelines that produce a tachyon
|
||||
// at a given position; when a tachyon is split and joins
|
||||
// an existing one, we increment, not just bitwise or.
|
||||
// the total is the sum of all timelines of all positions
|
||||
// in the final frame.
|
||||
// 3141808011 is too low
|
||||
func (m *manifold) quantumEval() uint64 {
|
||||
active := make([]uint64, m.width)
|
||||
m.source.Range(func(i uint32) {
|
||||
active[i] = 1
|
||||
})
|
||||
for _, frame := range m.splitters {
|
||||
next := make([]uint64, m.width)
|
||||
copy(next, active)
|
||||
|
||||
for i, t := range active {
|
||||
if t == 0 {
|
||||
continue
|
||||
}
|
||||
splitter := frame.Contains(uint32(i))
|
||||
if splitter {
|
||||
next[i] = 0
|
||||
next[i-1] += t
|
||||
next[i+1] += t
|
||||
}
|
||||
}
|
||||
active = next
|
||||
}
|
||||
total := uint64(0)
|
||||
for _, x := range active {
|
||||
total += x
|
||||
}
|
||||
return total
|
||||
}
|
||||
|
||||
func parseManifold(lines []string) *manifold {
|
||||
var m manifold
|
||||
m.width = uint32(len(lines[0]))
|
||||
m.source.Set(uint32(strings.Index(lines[0], "S")))
|
||||
for i := 1; i < len(lines); i++ {
|
||||
var splitter bitmap.Bitmap
|
||||
for j, c := range lines[i] {
|
||||
if c == '^' {
|
||||
splitter.Set(uint32(j))
|
||||
}
|
||||
}
|
||||
m.splitters = append(m.splitters, splitter)
|
||||
}
|
||||
return &m
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue