diff --git a/2024/03/main.go b/2024/03/main.go index 6886096..e3f2338 100644 --- a/2024/03/main.go +++ b/2024/03/main.go @@ -3,30 +3,51 @@ 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 - for _, line := range lines { - numbers := strings.Fields(line) - report := make([]int, len(numbers)) - for i, num := range numbers { - x, err := strconv.Atoi(num) - if err != nil { - panic(err) - } - report[i] = x - } + 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)