package main

import (
	"fmt"
	"regexp"
	"strconv"
)

func fractionAddition(expression string) string {
	abs := func(x int) int {
		return max(-x, x)
	}
	gcd := func(x, y int) int {
		for y != 0 {
			x, y = y, x%y
		}
		return x
	}
	NUM_REGEX, _ := regexp.Compile("[+-]?[0-9]+")

	num, denom := 0, 1

	nums := NUM_REGEX.FindAllString(expression, -1)
	for i := 0; i < len(nums); i += 2 {
		next_num, ok := strconv.Atoi(nums[i])
		if ok != nil {
			panic("failed to parse numerator")
		}

		next_denom, ok := strconv.Atoi(nums[i+1])
		if ok != nil {
			panic("failed to parse denominator")
		}

		num = num*next_denom + next_num*denom
		denom *= next_denom
	}

	d := abs(gcd(num, denom))

	num /= d
	denom /= d

	return fmt.Sprintf("%d/%d", num, denom)
}