2025 Day 7 Complete!
This commit is contained in:
142
2025/day07/input
Normal file
142
2025/day07/input
Normal file
@@ -0,0 +1,142 @@
|
||||
......................................................................S......................................................................
|
||||
.............................................................................................................................................
|
||||
......................................................................^......................................................................
|
||||
.............................................................................................................................................
|
||||
.....................................................................^.^.....................................................................
|
||||
.............................................................................................................................................
|
||||
....................................................................^.^.^....................................................................
|
||||
.............................................................................................................................................
|
||||
...................................................................^.^...^...................................................................
|
||||
.............................................................................................................................................
|
||||
..................................................................^...^.^.^..................................................................
|
||||
.............................................................................................................................................
|
||||
.................................................................^.^...^.^.^.................................................................
|
||||
.............................................................................................................................................
|
||||
................................................................^...^.^.^.^.^................................................................
|
||||
.............................................................................................................................................
|
||||
...............................................................^.............^...............................................................
|
||||
.............................................................................................................................................
|
||||
..............................................................^...^.^.^...^.^.^..............................................................
|
||||
.............................................................................................................................................
|
||||
.............................................................^.^.^...^.....^.^.^.............................................................
|
||||
.............................................................................................................................................
|
||||
............................................................^...^.^.^...^.^...^.^............................................................
|
||||
.............................................................................................................................................
|
||||
...........................................................^.^...^.^...^.^.^...^.^...........................................................
|
||||
.............................................................................................................................................
|
||||
..........................................................^.^.^.^...^...^...^.....^..........................................................
|
||||
.............................................................................................................................................
|
||||
.........................................................^.^.^.....^.^.^.^...^.....^.........................................................
|
||||
.............................................................................................................................................
|
||||
........................................................^.^.^.^.^.......^...^.^.^...^........................................................
|
||||
.............................................................................................................................................
|
||||
.......................................................^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.......................................................
|
||||
.............................................................................................................................................
|
||||
......................................................^.....^...^.^.^...........^...^.^......................................................
|
||||
.............................................................................................................................................
|
||||
.....................................................^...^.^.^.^...^.....^.^.^...^...^.^.....................................................
|
||||
.............................................................................................................................................
|
||||
....................................................^.....^.^.^.^.....^.^.^.^.^.^...^.^.^....................................................
|
||||
.............................................................................................................................................
|
||||
...................................................^...^.^.^.^.^.^.^...^.^.^.^...^.^.^.^.^...................................................
|
||||
.............................................................................................................................................
|
||||
..................................................^.^.^.^.^...^.^...^.^...^.^.^.^.^.^...^.^..................................................
|
||||
.............................................................................................................................................
|
||||
.................................................^...^.....^...^.^.^.^...^.....^.^...^.^...^.................................................
|
||||
.............................................................................................................................................
|
||||
................................................^.^.^.....^.^.^.^.....^.^.^.^...^.....^.^.^.^................................................
|
||||
.............................................................................................................................................
|
||||
...............................................^.....^.......^.....^...^.^...^.^.^...^.......^...............................................
|
||||
.............................................................................................................................................
|
||||
..............................................^.^...^...^.^...^...^...^.^...^.^.^.^...^...^.^.^..............................................
|
||||
.............................................................................................................................................
|
||||
.............................................^...^...^.^.........^.^...^.^.....^.^.^.^.^.^...^.^.............................................
|
||||
.............................................................................................................................................
|
||||
............................................^.^.^...^.^.^.^.^...^.^.^...^.^...^.^...^.^.^.^.^.^.^............................................
|
||||
.............................................................................................................................................
|
||||
...........................................^.....^.........^.^.^.^.^.^.^...^.^.^...^.^.^.^...^...^...........................................
|
||||
.............................................................................................................................................
|
||||
..........................................^.^.^.....^.......^.^...^.^.^.^.^.^.....^...^.^.^.^.^...^..........................................
|
||||
.............................................................................................................................................
|
||||
.........................................^.^.^.^.^...^.^.....^.....^.^.^.^.^.^.^...^...^.^.^.^.^.^.^.........................................
|
||||
.............................................................................................................................................
|
||||
........................................^.^.^...^...^.^.^.^.^.^.^.^...^...^...^.^...^.^...^...^.....^........................................
|
||||
.............................................................................................................................................
|
||||
.......................................^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.....^.^.^.^.^.^.^.........^.^.......................................
|
||||
.............................................................................................................................................
|
||||
......................................^.^.^.^.^.^.^.^.^.^.^...^.....^.......^.^.^.^.^.^.^.^...^...^...^......................................
|
||||
.............................................................................................................................................
|
||||
.....................................^.^.^.^.^...^...^.^.......^...^.^.....^...^.^.^.^.^.....^.^.^.^.^.^.....................................
|
||||
.............................................................................................................................................
|
||||
....................................^.....^.^...^...^.^.^.^.^.^...^.^.^...^.^.^.^.....^...^.^.^.^.^.^...^....................................
|
||||
.............................................................................................................................................
|
||||
...................................^.....^.^.........^...^.^.^.^.^.^.^...^.^.^...^.^.^.^.^...^.^...^.^...^...................................
|
||||
.............................................................................................................................................
|
||||
..................................^.^.^.^...^.^.^.^.^...^.^...^.^.^.^.^.....^.^.^.^.^.....^...^.....^.^.^.^..................................
|
||||
.............................................................................................................................................
|
||||
.................................^.^.........^...^.....^.^...^.^...^.^.^...^.^...^...^.^...^.^.^.^.^.....^.^.................................
|
||||
.............................................................................................................................................
|
||||
................................^.^...^.^.^.^.^...^...^...............^.....^.....^.^.^.^.^.^.^.^.^.^.....^.^................................
|
||||
.............................................................................................................................................
|
||||
...............................^.^.^...^.^...^.^.^...^...^.^.....^.^.^...^.^.^.^...^.^.^.^.^.^.^.^.^...^.^.^.^...............................
|
||||
.............................................................................................................................................
|
||||
..............................^...^.^.^.^.^.^.....^.^.^.^.....^.......^.^.^.^.^...^.^.^.^...^...^...^.^.^.....^..............................
|
||||
.............................................................................................................................................
|
||||
.............................^.^.^...^.^.^.^.^.^...^...^.^.^.^.^.^...^.^.^.^.^.......^.^.^.^...^.^.^.^...^.^...^.............................
|
||||
.............................................................................................................................................
|
||||
............................^.....^.^...^.^...^.^.....^.^...^.......^...^.^.....^...^.^...^...^.^.^.....^.^.....^............................
|
||||
.............................................................................................................................................
|
||||
...........................^...^...^...^.^.......^.....^.^.....^.^.^.^.^...^.^.^.^.....^.^.^...^.^.^.....^...^...^...........................
|
||||
.............................................................................................................................................
|
||||
..........................^.....^.^.^.......^.^...^.^.^.^.^.^.^.^.^.^.....^.....^.^...^.^...^.^.^...^...^.^.^.^...^..........................
|
||||
.............................................................................................................................................
|
||||
.........................^.^.^.^.^.^.^.^.^.^...^.....^.^...^.^.^.^.^.^.^.^.^...^.^.^.^.^.^...^.^.^...^.^...^.^.^.^.^.........................
|
||||
.............................................................................................................................................
|
||||
........................^.^.^...^.^.^...^.^...^.........^.^.^...^.^.^.^.....^.^...^.^.^.^.^...^.^.^...^.^.....^.....^........................
|
||||
.............................................................................................................................................
|
||||
.......................^.^.^.^...^.^.....^...^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^...^.^.....^.......^.^.^.^...^.^...^.......................
|
||||
.............................................................................................................................................
|
||||
......................^.^...^.^.^.^.....^.^.^.^.^.....^.^...^.^.^.^.^.^.^...^...^.^.^.^...^.....^.^...^.^.^.^.^.^.^.^.^......................
|
||||
.............................................................................................................................................
|
||||
.....................^.^.^.^.^...^.^...^...^.^...^.^...^.^...^.......^.^.^.^.....^.^...^.^.^.^...^.^.^.^.^.^.^.^...^.^.^.....................
|
||||
.............................................................................................................................................
|
||||
....................^...^.^.^.....^.^.^.^.^.^.^.^.^.^.^.^.^...^...^.^.^.^.......^...^.....^.^...^...^.^.....^.^.^...^.^.^....................
|
||||
.............................................................................................................................................
|
||||
...................^.^.^.^.^.^.......^.^.^.......^...^.^.^.^...^.^.^...^.^.^.^...^.^.^.^.....^.^.^.^.^.^...^.^...^.....^.^...................
|
||||
.............................................................................................................................................
|
||||
..................^.^...^.......^.^.^.^.....^.^...^.^...^...^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^...^.^...^.^.^.^.^...^.^.^...^..................
|
||||
.............................................................................................................................................
|
||||
.................^.....^.^...^...^.^.^.^...^.^.^.^...^.......^.^...^...^.^.^.....^.^.^...^.^...^.....^.^...^.^.^.^.^.^.^.^.^.................
|
||||
.............................................................................................................................................
|
||||
................^.^.^.....^.^.^.^.^.^.^.......^.^.^.....^...^.^...^.^.^.^.^...^.^...^.^.^...^...^.^.^.^...^.^.^.^...^.^.....^................
|
||||
.............................................................................................................................................
|
||||
...............^...^.^.^.^.^.^...^.^...^...^.^.^.^.^.^.^...^...^.^...............^...^.^.^.^.....^.....^.^.^.^.....^.^...^.^.^...............
|
||||
.............................................................................................................................................
|
||||
..............^.^...^.^.^.........^.........^...^.^.^.....^.^...^.^.^.^.^.^...^...^.^...^.^.^.^.......^.^...^.....^.^.^.^.^.^.^..............
|
||||
.............................................................................................................................................
|
||||
.............^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^...^.^.^...^.^.^.^.....^.^.^.^...^.^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.............
|
||||
.............................................................................................................................................
|
||||
............^.^.^.^...^.^.^.^.^...^...^.....^.^.^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^...^.^.^...^...^.....^.^...^.^.^.^.^.......^...^............
|
||||
.............................................................................................................................................
|
||||
...........^.....^.^.^.^.....^.^...^.^.^.^.^.....^.^.^...^.^.^...^.^.....^.......^.^.^.....^.^.^.^...^.^.^.^.^.^.^.^.^.^...^...^.^...........
|
||||
.............................................................................................................................................
|
||||
..........^.^.^.^.........^.^.....^.......^.^...^.^.^.......^.......^.^.^.^.....^.^...^.^...^.^.^.^...^...^.^.^.^.^.^.^...^.^.^.^.^..........
|
||||
.............................................................................................................................................
|
||||
.........^.^.^...^.^.........^...^.^...^.^.^.^.^.^.^.^.....^.^.^.^...^.^.^...^...^...^.^.^.^.^.^.^.^.^.^.^...^.^...^.^...^.^.^...^.^.........
|
||||
.............................................................................................................................................
|
||||
........^.^.^.^.^...^.^...^.^.^.^...^.^.^.^.^.....^...^...^.^...^.^...^.^.^.^...^...^.^...^.......^.^.^.^...^.....^...^.^.^.....^.^.^........
|
||||
.............................................................................................................................................
|
||||
.......^.^.^...^.^.^.....^.^.^.^.....^.....^.^...^.^.^.....^.^...^...........^...^.^.^.^.....^...^.^.^...^.^.^.^.......^.^.^.^.^.....^.......
|
||||
.............................................................................................................................................
|
||||
......^.^...^.....^.^...^.....^...^...^.^.^.^.^.^.^.^.^.^.^.^.^.....^.^.^...^.^.^...^.^.^.^.^.^.^.^...^.....^.^.....^.^.^.^.^...^...^.^......
|
||||
.............................................................................................................................................
|
||||
.....^.^.^.^.^.^...^.^.......^.^.^...^...^.^.^.^.^.^.^.....^.^.....^...^.....^.^.^.^...^.^.^.^.^.^.^...^.^.^.^.^.^.^.^...^...^.^.^...^.^.....
|
||||
.............................................................................................................................................
|
||||
....^.^.^.....^.^...^.^...^.^.......^...^.^.^.^.^.^...^...^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.....^.^...^...^.^.^.^.^.^.^....
|
||||
.............................................................................................................................................
|
||||
...^.^.......^.^.....^.^.^.^.^...^.^...^.^.^.^.^.^.^.^.^.^.^...^...^.^.^.^.^.....^.^.^...^.^.^...^...^.^.^...^...^.^.^.^...^.^...^.^...^.^...
|
||||
.............................................................................................................................................
|
||||
..^.....^.^.^...^.........^.....^...^.^.^...^.^.....^...^.^.^.^.^.^...^.........^...^.^...^...^.^...^...^.......^.^.....^.^.......^.^.^...^..
|
||||
.............................................................................................................................................
|
||||
.^.^...^.....^.^.^.^...^.^.....^.^.^.^.^.^.^.^...^...^.^.......^.^...^.^.....^.^.^...^.....^.^.^.^.^.^.......^.^.^...^.^.^.^.^...^...^.^.^.^.
|
||||
.............................................................................................................................................
|
||||
138
2025/day07/main.go
Normal file
138
2025/day07/main.go
Normal file
@@ -0,0 +1,138 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
inp := h.StdinToStringSlice()
|
||||
part1(inp)
|
||||
fmt.Println()
|
||||
part2(inp)
|
||||
}
|
||||
|
||||
func part1(inp []string) {
|
||||
var ret int
|
||||
m := h.StringSliceToCoordByteMap(inp)
|
||||
ok := true
|
||||
for ok {
|
||||
var splits int
|
||||
splits, ok = progBeams(&m)
|
||||
ret += splits
|
||||
}
|
||||
fmt.Println("# Part 1")
|
||||
fmt.Println(ret)
|
||||
}
|
||||
|
||||
func progBeams(m *h.CoordByteMap) (int, bool) {
|
||||
var splits int
|
||||
beam, err := m.FindLast('|')
|
||||
if err != nil {
|
||||
beam, _ = m.FindFirst('S')
|
||||
}
|
||||
if beam.Y == m.BRY {
|
||||
return 0, false
|
||||
}
|
||||
beams := m.FindAllOnRow(beam.Y, '|')
|
||||
if len(beams) == 0 {
|
||||
beams = append(beams, beam)
|
||||
}
|
||||
|
||||
for i := range beams {
|
||||
nxt := m.Get(beams[i].South())
|
||||
switch nxt {
|
||||
case '.':
|
||||
m.Put(beams[i].South(), '|')
|
||||
case '^':
|
||||
splits++
|
||||
m.Put(beams[i].South().East(), '|')
|
||||
m.Put(beams[i].South().West(), '|')
|
||||
}
|
||||
}
|
||||
return splits, true
|
||||
}
|
||||
|
||||
func part2(inp []string) {
|
||||
m := h.StringSliceToCoordByteMap(inp)
|
||||
fmt.Println("# Part 2")
|
||||
fmt.Println(quantumRevKickoff(&m))
|
||||
}
|
||||
|
||||
// quantumRevKickoff starts checks for each potential beam output
|
||||
func quantumRevKickoff(m *h.CoordByteMap) int {
|
||||
var ret int
|
||||
var wg sync.WaitGroup
|
||||
status := make([]byte, m.BRX)
|
||||
for i := range status {
|
||||
status[i] = '.'
|
||||
}
|
||||
track := &WorldTracker{
|
||||
t: make(map[h.Coordinate]int),
|
||||
}
|
||||
for x := m.TLX; x < m.BRX; x++ {
|
||||
c := h.Coordinate{X: x, Y: m.BRY}
|
||||
wg.Go(func() {
|
||||
if r, v := quantumRevCalc(m, c, track); v {
|
||||
ret += r
|
||||
status[c.X] = 'O'
|
||||
} else {
|
||||
status[c.X] = 'X'
|
||||
}
|
||||
})
|
||||
}
|
||||
wg.Wait()
|
||||
return ret + 1
|
||||
}
|
||||
|
||||
type WorldTracker struct {
|
||||
t map[h.Coordinate]int
|
||||
lock sync.Mutex
|
||||
}
|
||||
|
||||
func (t *WorldTracker) Get(k h.Coordinate) (int, bool) {
|
||||
t.lock.Lock()
|
||||
defer t.lock.Unlock()
|
||||
v, ok := t.t[k]
|
||||
return v, ok
|
||||
}
|
||||
func (t *WorldTracker) Set(k h.Coordinate, v int) {
|
||||
t.lock.Lock()
|
||||
defer t.lock.Unlock()
|
||||
t.t[k] = v
|
||||
}
|
||||
|
||||
// quantumRevCalc calculates how many worlds would provide a beam at
|
||||
// the given coordinate
|
||||
func quantumRevCalc(m *h.CoordByteMap, c h.Coordinate, track *WorldTracker) (int, bool) {
|
||||
if v, ok := track.Get(c); ok {
|
||||
return v, ok
|
||||
}
|
||||
var ret int
|
||||
var valid bool
|
||||
if m.Get(c.East()) == '^' {
|
||||
if r, v := quantumRevCalc(m, c.East(), track); v {
|
||||
ret += r
|
||||
valid = true
|
||||
}
|
||||
}
|
||||
if m.Get(c.West()) == '^' {
|
||||
if r, v := quantumRevCalc(m, c.West(), track); v {
|
||||
ret += r
|
||||
valid = true
|
||||
}
|
||||
}
|
||||
if m.Get(c.North()) == '.' {
|
||||
if r, v := quantumRevCalc(m, c.North(), track); v {
|
||||
ret += r
|
||||
valid = true
|
||||
}
|
||||
}
|
||||
track.Set(c, ret)
|
||||
if m.Get(c.North()) == 'S' {
|
||||
return 1, true
|
||||
}
|
||||
return ret, valid
|
||||
}
|
||||
274
2025/day07/problem
Normal file
274
2025/day07/problem
Normal file
@@ -0,0 +1,274 @@
|
||||
Advent of Code
|
||||
br0xen [7](AoC++) 14*
|
||||
|
||||
--- Day 7: Laboratories ---
|
||||
|
||||
You thank the cephalopods for the help and exit the trash compactor,
|
||||
finding yourself in the [16]familiar [17]halls of a North Pole research
|
||||
wing.
|
||||
|
||||
Based on the large sign that says "teleporter hub", they seem to be
|
||||
researching teleportation; you can't help but try it for yourself and step
|
||||
onto the large yellow teleporter pad.
|
||||
|
||||
Suddenly, you find yourself in an unfamiliar room! The room has no doors;
|
||||
the only way out is the teleporter. Unfortunately, the teleporter seems to
|
||||
be leaking [18]magic smoke.
|
||||
|
||||
Since this is a teleporter lab, there are lots of spare parts, manuals,
|
||||
and diagnostic equipment lying around. After connecting one of the
|
||||
diagnostic tools, it helpfully displays error code 0H-N0, which apparently
|
||||
means that there's an issue with one of the tachyon manifolds.
|
||||
|
||||
You quickly locate a diagram of the tachyon manifold (your puzzle input).
|
||||
A tachyon beam enters the manifold at the location marked S; tachyon beams
|
||||
always move downward. Tachyon beams pass freely through empty space (.).
|
||||
However, if a tachyon beam encounters a splitter (^), the beam is stopped;
|
||||
instead, a new tachyon beam continues from the immediate left and from the
|
||||
immediate right of the splitter.
|
||||
|
||||
For example:
|
||||
|
||||
.......S.......
|
||||
...............
|
||||
.......^.......
|
||||
...............
|
||||
......^.^......
|
||||
...............
|
||||
.....^.^.^.....
|
||||
...............
|
||||
....^.^...^....
|
||||
...............
|
||||
...^.^...^.^...
|
||||
...............
|
||||
..^...^.....^..
|
||||
...............
|
||||
.^.^.^.^.^...^.
|
||||
...............
|
||||
|
||||
In this example, the incoming tachyon beam (|) extends downward from S
|
||||
until it reaches the first splitter:
|
||||
|
||||
.......S.......
|
||||
.......|.......
|
||||
.......^.......
|
||||
...............
|
||||
......^.^......
|
||||
...............
|
||||
.....^.^.^.....
|
||||
...............
|
||||
....^.^...^....
|
||||
...............
|
||||
...^.^...^.^...
|
||||
...............
|
||||
..^...^.....^..
|
||||
...............
|
||||
.^.^.^.^.^...^.
|
||||
...............
|
||||
|
||||
At that point, the original beam stops, and two new beams are emitted from
|
||||
the splitter:
|
||||
|
||||
.......S.......
|
||||
.......|.......
|
||||
......|^|......
|
||||
...............
|
||||
......^.^......
|
||||
...............
|
||||
.....^.^.^.....
|
||||
...............
|
||||
....^.^...^....
|
||||
...............
|
||||
...^.^...^.^...
|
||||
...............
|
||||
..^...^.....^..
|
||||
...............
|
||||
.^.^.^.^.^...^.
|
||||
...............
|
||||
|
||||
Those beams continue downward until they reach more splitters:
|
||||
|
||||
.......S.......
|
||||
.......|.......
|
||||
......|^|......
|
||||
......|.|......
|
||||
......^.^......
|
||||
...............
|
||||
.....^.^.^.....
|
||||
...............
|
||||
....^.^...^....
|
||||
...............
|
||||
...^.^...^.^...
|
||||
...............
|
||||
..^...^.....^..
|
||||
...............
|
||||
.^.^.^.^.^...^.
|
||||
...............
|
||||
|
||||
At this point, the two splitters create a total of only three tachyon
|
||||
beams, since they are both dumping tachyons into the same place between
|
||||
them:
|
||||
|
||||
.......S.......
|
||||
.......|.......
|
||||
......|^|......
|
||||
......|.|......
|
||||
.....|^|^|.....
|
||||
...............
|
||||
.....^.^.^.....
|
||||
...............
|
||||
....^.^...^....
|
||||
...............
|
||||
...^.^...^.^...
|
||||
...............
|
||||
..^...^.....^..
|
||||
...............
|
||||
.^.^.^.^.^...^.
|
||||
...............
|
||||
|
||||
This process continues until all of the tachyon beams reach a splitter or
|
||||
exit the manifold:
|
||||
|
||||
.......S.......
|
||||
.......|.......
|
||||
......|^|......
|
||||
......|.|......
|
||||
.....|^|^|.....
|
||||
.....|.|.|.....
|
||||
....|^|^|^|....
|
||||
....|.|.|.|....
|
||||
...|^|^|||^|...
|
||||
...|.|.|||.|...
|
||||
..|^|^|||^|^|..
|
||||
..|.|.|||.|.|..
|
||||
.|^|||^||.||^|.
|
||||
.|.|||.||.||.|.
|
||||
|^|^|^|^|^|||^|
|
||||
|.|.|.|.|.|||.|
|
||||
|
||||
To repair the teleporter, you first need to understand the beam-splitting
|
||||
properties of the tachyon manifold. In this example, a tachyon beam is
|
||||
split a total of 21 times.
|
||||
|
||||
Analyze your manifold diagram. How many times will the beam be split?
|
||||
|
||||
Your puzzle answer was 1600.
|
||||
|
||||
--- Part Two ---
|
||||
|
||||
With your analysis of the manifold complete, you begin fixing the
|
||||
teleporter. However, as you open the side of the teleporter to replace the
|
||||
broken manifold, you are surprised to discover that it isn't a classical
|
||||
tachyon manifold - it's a quantum tachyon manifold.
|
||||
|
||||
With a quantum tachyon manifold, only a single tachyon particle is sent
|
||||
through the manifold. A tachyon particle takes both the left and right
|
||||
path of each splitter encountered.
|
||||
|
||||
Since this is impossible, the manual recommends the many-worlds
|
||||
interpretation of quantum tachyon splitting: each time a particle reaches
|
||||
a splitter, it's actually time itself which splits. In one timeline, the
|
||||
particle went left, and in the other timeline, the particle went right.
|
||||
|
||||
To fix the manifold, what you really need to know is the number of
|
||||
timelines active after a single particle completes all of its possible
|
||||
journeys through the manifold.
|
||||
|
||||
In the above example, there are many timelines. For instance, there's the
|
||||
timeline where the particle always went left:
|
||||
|
||||
.......S.......
|
||||
.......|.......
|
||||
......|^.......
|
||||
......|........
|
||||
.....|^.^......
|
||||
.....|.........
|
||||
....|^.^.^.....
|
||||
....|..........
|
||||
...|^.^...^....
|
||||
...|...........
|
||||
..|^.^...^.^...
|
||||
..|............
|
||||
.|^...^.....^..
|
||||
.|.............
|
||||
|^.^.^.^.^...^.
|
||||
|..............
|
||||
|
||||
Or, there's the timeline where the particle alternated going left and
|
||||
right at each splitter:
|
||||
|
||||
.......S.......
|
||||
.......|.......
|
||||
......|^.......
|
||||
......|........
|
||||
......^|^......
|
||||
.......|.......
|
||||
.....^|^.^.....
|
||||
......|........
|
||||
....^.^|..^....
|
||||
.......|.......
|
||||
...^.^.|.^.^...
|
||||
.......|.......
|
||||
..^...^|....^..
|
||||
.......|.......
|
||||
.^.^.^|^.^...^.
|
||||
......|........
|
||||
|
||||
Or, there's the timeline where the particle ends up at the same point as
|
||||
the alternating timeline, but takes a totally different path to get there:
|
||||
|
||||
.......S.......
|
||||
.......|.......
|
||||
......|^.......
|
||||
......|........
|
||||
.....|^.^......
|
||||
.....|.........
|
||||
....|^.^.^.....
|
||||
....|..........
|
||||
....^|^...^....
|
||||
.....|.........
|
||||
...^.^|..^.^...
|
||||
......|........
|
||||
..^..|^.....^..
|
||||
.....|.........
|
||||
.^.^.^|^.^...^.
|
||||
......|........
|
||||
|
||||
In this example, in total, the particle ends up on 40 different timelines.
|
||||
|
||||
Apply the many-worlds interpretation of quantum tachyon splitting to your
|
||||
manifold diagram. In total, how many different timelines would a single
|
||||
tachyon particle end up on?
|
||||
|
||||
Your puzzle answer was 8632253783011.
|
||||
|
||||
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||
|
||||
At this point, you should [19]return to your Advent calendar and try
|
||||
another puzzle.
|
||||
|
||||
If you still want to see it, you can [20]get your puzzle input.
|
||||
|
||||
References
|
||||
|
||||
Visible links
|
||||
1. https://adventofcode.com/
|
||||
2. https://adventofcode.com/2025/about
|
||||
3. https://adventofcode.com/2025/events
|
||||
4. https://adventofcode.com/2025/shop
|
||||
5. https://adventofcode.com/2025/settings
|
||||
6. https://adventofcode.com/2025/auth/logout
|
||||
7. Advent of Code Supporter
|
||||
https://adventofcode.com/2025/support
|
||||
8. https://adventofcode.com/2025
|
||||
9. https://adventofcode.com/2025
|
||||
10. https://adventofcode.com/2025/support
|
||||
11. https://adventofcode.com/2025/sponsors
|
||||
12. https://adventofcode.com/2025/leaderboard/private
|
||||
13. https://adventofcode.com/2025/stats
|
||||
14. https://adventofcode.com/2025/sponsors
|
||||
16. https://adventofcode.com/2024/day/6
|
||||
17. https://adventofcode.com/2018/day/4
|
||||
18. https://en.wikipedia.org/wiki/Magic_smoke
|
||||
19. https://adventofcode.com/2025
|
||||
20. https://adventofcode.com/2025/day/7/input
|
||||
16
2025/day07/testinput
Normal file
16
2025/day07/testinput
Normal file
@@ -0,0 +1,16 @@
|
||||
.......S.......
|
||||
...............
|
||||
.......^.......
|
||||
...............
|
||||
......^.^......
|
||||
...............
|
||||
.....^.^.^.....
|
||||
...............
|
||||
....^.^...^....
|
||||
...............
|
||||
...^.^...^.^...
|
||||
...............
|
||||
..^...^.....^..
|
||||
...............
|
||||
.^.^.^.^.^...^.
|
||||
...............
|
||||
2
go.mod
2
go.mod
@@ -1,6 +1,6 @@
|
||||
module git.bullercodeworks.com/brian/adventofcode
|
||||
|
||||
go 1.23.0
|
||||
go 1.25.1
|
||||
|
||||
require (
|
||||
github.com/br0xen/termbox-screen v0.0.0-20190712162752-c91f70ac38c6
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"slices"
|
||||
)
|
||||
|
||||
type CoordByteMap struct {
|
||||
@@ -93,14 +94,14 @@ func (m *CoordByteMap) GetCol(x int) []byte {
|
||||
|
||||
func (m *CoordByteMap) AddRow(row []byte) {
|
||||
y := m.BRY + 1
|
||||
for x := 0; x < len(row); x++ {
|
||||
for x := range row {
|
||||
m.Put(Coordinate{X: x + m.TLX, Y: y}, row[x])
|
||||
}
|
||||
}
|
||||
|
||||
func (m *CoordByteMap) AddCol(col []byte) {
|
||||
x := m.BRX + 1
|
||||
for y := 0; y < len(col); y++ {
|
||||
for y := range col {
|
||||
m.Put(Coordinate{X: x, Y: y + m.TLY}, col[y])
|
||||
}
|
||||
}
|
||||
@@ -308,20 +309,29 @@ func (m *CoordByteMap) FindAll(b ...byte) []Coordinate {
|
||||
return ret
|
||||
}
|
||||
|
||||
func (m *CoordByteMap) FindAllOnRow(row int, b ...byte) []Coordinate {
|
||||
var ret []Coordinate
|
||||
if row < m.TLY || row > m.BRX {
|
||||
return ret
|
||||
}
|
||||
for x := m.TLX; x <= m.BRX; x++ {
|
||||
c := Coordinate{X: x, Y: row}
|
||||
for i := range b {
|
||||
if m.Get(c) == b[i] {
|
||||
ret = append(ret, c)
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (m *CoordByteMap) FindAllNot(b ...byte) map[Coordinate]byte {
|
||||
ret := make(map[Coordinate]byte)
|
||||
for y := m.TLY; y <= m.BRY; y++ {
|
||||
for x := m.TLX; x <= m.BRX; x++ {
|
||||
c := Coordinate{X: x, Y: y}
|
||||
v := m.Get(c)
|
||||
var is bool
|
||||
for i := range b {
|
||||
if v == b[i] {
|
||||
is = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !is {
|
||||
if !slices.Contains(b, v) {
|
||||
ret[c] = v
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@ package aoc
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"math"
|
||||
"os"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
@@ -65,7 +65,7 @@ func Gcd(x, y int) int {
|
||||
// Lcm finds the least common multiple, using gcd
|
||||
func Lcm(a, b int, integers ...int) int {
|
||||
result := a * b / Gcd(a, b)
|
||||
for i := 0; i < len(integers); i++ {
|
||||
for i := range integers {
|
||||
result = Lcm(result, integers[i])
|
||||
}
|
||||
return result
|
||||
@@ -92,8 +92,8 @@ func ArgIsSet(a string) bool {
|
||||
// GetArgValue returns the argument with the asked for key or ""
|
||||
func GetArgValue(a string) string {
|
||||
for i := range os.Args {
|
||||
if strings.HasPrefix(os.Args[i], a+"=") {
|
||||
return strings.TrimPrefix(os.Args[i], a+"=")
|
||||
if ret, ok := strings.CutPrefix(os.Args[i], a+"="); ok {
|
||||
return ret
|
||||
}
|
||||
}
|
||||
return ""
|
||||
@@ -206,8 +206,7 @@ func FileToString(fn string) string {
|
||||
func FileToBytes(fn string) []byte {
|
||||
var c []byte
|
||||
var err error
|
||||
c, err = ioutil.ReadFile(fn)
|
||||
if err != nil {
|
||||
if c, err = os.ReadFile(fn); err != nil {
|
||||
fmt.Println("Unable to read file: " + fn)
|
||||
os.Exit(1)
|
||||
}
|
||||
@@ -322,24 +321,16 @@ func StringSliceIndex(h []string, n string) int {
|
||||
|
||||
// StringSliceContains takes a string slice and a string and return true
|
||||
// if the string is in the slice
|
||||
// Created before we had a slices.Contains. Still here for old solutions
|
||||
func StringSliceContains(h []string, n string) bool {
|
||||
for _, v := range h {
|
||||
if v == n {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
return slices.Contains(h, n)
|
||||
}
|
||||
|
||||
// IntSliceContains takes an int slice and an int and return true
|
||||
// if the int is in the slice
|
||||
// Created before we had a slices.Contains. Still here for old solutions
|
||||
func IntSliceContains(h []int, n int) bool {
|
||||
for _, v := range h {
|
||||
if v == n {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
return slices.Contains(h, n)
|
||||
}
|
||||
|
||||
// AppendString returns a slice of strings that are base+group[...]
|
||||
@@ -375,7 +366,7 @@ func IntersectStringSlice(list1, list2 []string) []string {
|
||||
// Unique removes all duplicates
|
||||
func UniqueStringSlice(list []string) []string {
|
||||
var ret []string
|
||||
for k := 0; k < len(list); k++ {
|
||||
for k := range list {
|
||||
var dupe bool
|
||||
for j := k; j < len(list); j++ {
|
||||
if list[k] == list[j] {
|
||||
|
||||
Reference in New Issue
Block a user