import java.util.regex.*;


public class Quad {
    /**
     * Test the quadratic parser by solving
     * an equation
     *
     * @param args An equation of the form 'ax^2+bx+c'
     */
    public static void main(String[] args) {
	int[] coeff = Quad.parseQuadratic(args[0]);
	System.out.println(java.util.Arrays.toString(coeff));

	int a = coeff[0];
	int b = coeff[1];
	int c = coeff[2];
	double root1 = (-b + Math.sqrt((b * b) - (4 * a * c))) / (2 * a);
	double root2 = (-b - Math.sqrt((b * b) - (4 * a * c))) / (2 * a);
	System.out.printf("Roots are %f and %f\n", root1, root2);
    }

    /**
     *
     * @param s An equation of the form 'ax^2+bx+c'
     *
     * @return An array of coefficients/constant
     */
    public static int[] parseQuadratic(String s) {
	// Clean expression of whitespace
	s = s.replaceAll("\\s", "");
	int[] result = new int[3];
	Pattern p = Pattern.compile("(\\d*)x\\^2(?:([+\\-]\\d*)x)?([+\\-]\\d*)?");
	Matcher m = p.matcher(s);

	if (m.matches()) {
	    for (int i = 1; i <= m.groupCount(); i++) {
		String x = m.group(i);

		if (x == null) {
		    x = "0";
		}

		if (x.startsWith("+")) {
		    x = x.substring(1);
		}

		if ("".equals(x) || "-".equals(x)) {
		    x += "1";
		}

		result[i - 1] = Integer.valueOf(x);
	    }
	} else {
	    throw new IllegalArgumentException(String.format(
			"Invalid quadratic:  %s", s));
	}

	return result;
    }
}

