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++ } } }