package day13 import ( "adventofcode2024/utils" _ "adventofcode2024/utils/grid2d" _ "adventofcode2024/utils/inputs" "regexp" _ "fmt" "strings" ) func Part1(input string) int { val := 0 machines := strings.Split(input, "\n\n") pattern := `Button A: X\+(\d+), Y\+(\d+)\sButton B: X\+(\d+), Y\+(\d+)\sPrize: X=(\d+), Y=(\d+)` re := regexp.MustCompile(pattern) for _, machine := range machines { matches := re.FindStringSubmatch(machine) a := utils.MustAtoi(matches[1]) b := utils.MustAtoi(matches[2]) c := utils.MustAtoi(matches[3]) d := utils.MustAtoi(matches[4]) X := utils.MustAtoi(matches[5]) Y := utils.MustAtoi(matches[6]) // fmt.Println(matches) B := (Y*a - X*b)/(a*d - c*b) A := (X - c*B)/a // fmt.Printf("A: %d B: %d\n", A, B) if (A*a + B*c == X && A*b + B*d == Y) { val += A*3 + B } } return val } func Part2(input string) int { val := 0 machines := strings.Split(input, "\n\n") pattern := `Button A: X\+(\d+), Y\+(\d+)\sButton B: X\+(\d+), Y\+(\d+)\sPrize: X=(\d+), Y=(\d+)` re := regexp.MustCompile(pattern) for _, machine := range machines { matches := re.FindStringSubmatch(machine) a := utils.MustAtoi(matches[1]) b := utils.MustAtoi(matches[2]) c := utils.MustAtoi(matches[3]) d := utils.MustAtoi(matches[4]) X := utils.MustAtoi(matches[5]) + 10000000000000 Y := utils.MustAtoi(matches[6]) + 10000000000000 // fmt.Println(matches) B := (Y*a - X*b)/(a*d - c*b) A := (X - c*B)/a // fmt.Printf("A: %d B: %d\n", A, B) if (A*a + B*c == X && A*b + B*d == Y) { val += A*3 + B } } return val }