63 lines
912 B
Go
63 lines
912 B
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
_ "embed"
|
|
"fmt"
|
|
"iter"
|
|
"strings"
|
|
|
|
aoc "go.sour.is/advent-of-code"
|
|
)
|
|
|
|
// var log = aoc.Log
|
|
|
|
func main() { aoc.MustResult(aoc.Runner(run)) }
|
|
|
|
type result struct {
|
|
valuePT1 int
|
|
valuePT2 int
|
|
}
|
|
|
|
func (r result) String() string { return fmt.Sprintf("%#v", r) }
|
|
|
|
func run(scan *bufio.Scanner) (*result, error) {
|
|
g := aoc.Graph[string, int]()
|
|
var root string
|
|
|
|
for scan.Scan() {
|
|
line := scan.Text()
|
|
v, lis, ok := strings.Cut(line, ": ")
|
|
if !ok {
|
|
continue
|
|
}
|
|
|
|
if root == "" {
|
|
root = v
|
|
}
|
|
|
|
for _, l := range strings.Split(lis, " ") {
|
|
g.AddEdge(v, l, 1)
|
|
g.AddEdge(l, v, 1)
|
|
|
|
}
|
|
}
|
|
|
|
for i, v := range enumerate(g.BFS(root)) {
|
|
fmt.Println(i, v)
|
|
}
|
|
|
|
return &result{}, nil
|
|
}
|
|
|
|
func enumerate[T any](vs iter.Seq[T]) iter.Seq2[int, T] {
|
|
i := 0
|
|
return func(yield func(int, T) bool) {
|
|
for v := range vs {
|
|
if !yield(i, v) {
|
|
return
|
|
}
|
|
i++
|
|
}
|
|
}
|
|
}
|