package main import ( "fmt" "os" "regexp" "strconv" "strings" ) func calculate(x string) int { clean1 := strings.Replace(x, "mul(", "", -1) clean2 := strings.Replace(clean1, ")", "", -1) splat := strings.Split(clean2, ",") l, err := strconv.Atoi(splat[0]) if err != nil { } r, err := strconv.Atoi(splat[1]) if err != nil { } return l * r } func main() { lines, err := parse() if err != nil { fmt.Println("Error:", err) } oneline := strings.Join(lines, "") var p1 int = 0 var p2 int = 0 re := regexp.MustCompile(`mul\(\d+,\d+\)`) matches := re.FindAllString(oneline, -1) for i := 0; i < len(matches); i++ { p1 += calculate(matches[i]) } onecleanre := regexp.MustCompile(`(?s)don\'t\(\).*?do\(\)|$`) oneclean := onecleanre.ReplaceAllString(oneline, "") re2 := regexp.MustCompile(`mul\(\d+,\d+\)`) matches2 := re2.FindAllString(oneclean, -1) for i := 0; i < len(matches2); i++ { p2 += calculate(matches2[i]) } fmt.Println("p1: ", p1) fmt.Println("p2: ", p2) } func parse() ([]string, error) { if len(os.Args) < 2 { return nil, fmt.Errorf("no file provided") } filePath := os.Args[1] data, err := os.ReadFile(filePath) if err != nil { return nil, fmt.Errorf("error opening file: %v", err) } chunks := strings.Split(string(data), "\n") var nonEmpthyChunks = []string{} for _, chunk := range chunks { if chunk != "" { nonEmpthyChunks = append(nonEmpthyChunks, chunk) } } return nonEmpthyChunks, nil }