package util import ( "bufio" "io" "log" "strconv" "strings" ) func MustConv(s string) int { n, err := strconv.Atoi(s) if err != nil { panic(err) } return n } func ParseLines(r io.Reader) ([][][]int, error) { data := make([][][]int, 2) filter := func(r rune) bool { return r == '|' || r == ',' } buf, err := io.ReadAll(r) if err != nil { log.Fatal(err) } parts := strings.Split(string(buf), "\n\n") for i, part := range parts { scanner := bufio.NewScanner(strings.NewReader(part)) for scanner.Scan() { filtered := strings.FieldsFunc(scanner.Text(), filter) var nums []int for _, n := range filtered { nums = append(nums, MustConv(n)) } data[i] = append(data[i], nums) } if err := scanner.Err(); err != nil { return nil, err } } return data, nil }