package two import ( "bufio" "io" "strconv" "strings" "github.com/onyx-and-iris/aoc2024/day-05/internal/update" ) func parseLines(r io.Reader) ([]update.Update, map[int][]int, error) { var updates []update.Update orderings := make(map[int][]int, 0) var inUpdates bool scanner := bufio.NewScanner(r) for scanner.Scan() { line := scanner.Text() if len(line) == 0 { inUpdates = true continue } if inUpdates { var update update.Update for _, n := range strings.Split(line, ",") { update.Pages = append(update.Pages, mustConv(n)) } updates = append(updates, update) } else { left, right := func() (int, int) { x := strings.Split(line, "|") return mustConv(x[0]), mustConv(x[1]) }() orderings[left] = append(orderings[left], right) } } if err := scanner.Err(); err != nil { return nil, nil, err } return updates, orderings, nil } func mustConv(s string) int { n, err := strconv.Atoi(s) if err != nil { panic(err) } return n }