content: import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  
  final class WordProblemSolver {
  
      private static final String INTEGER_REGEX_STRING = "(-?\\d+)";
  
      private static final String BINARY_OPERATION_REGEX_STRING = "(plus|minus|multiplied by|divided by)";
  
      private static final String VALID_QUESTION_REGEX_STRING =
              "^What is " + INTEGER_REGEX_STRING +
              "( " + BINARY_OPERATION_REGEX_STRING + " " + INTEGER_REGEX_STRING + ")*" +
              "\\?$";
  
      int solve(final String wordProblem) {
          if (!wordProblem.matches(VALID_QUESTION_REGEX_STRING)) {
              throw new IllegalArgumentException("I'm sorry, I don't understand the question!");
          }
  
          final Matcher initialValueMatcher = Pattern.compile(INTEGER_REGEX_STRING).matcher(wordProblem);
  
          initialValueMatcher.find();
          int result = Integer.parseInt(initialValueMatcher.group());
  
          final Matcher operationAndValueMatcher
                  = Pattern.compile(BINARY_OPERATION_REGEX_STRING + " " + INTEGER_REGEX_STRING).matcher(wordProblem);
  
          while (operationAndValueMatcher.find()) {
              result = applyBinaryOperation(
                  result,
                  operationAndValueMatcher.group(1),
                  Integer.parseInt(operationAndValueMatcher.group(2)));
          }
  
          return result;
      }
  
      private int applyBinaryOperation(
              final int firstValue,
              final String operationDescription,
              final int secondValue) {
  
          switch (operationDescription) {
              case "plus":
                  return firstValue + secondValue;
              case "minus":
                  return firstValue - secondValue;
              case "multiplied by":
                  return firstValue * secondValue;
              case "divided by":
                  return firstValue / secondValue;
              default:
                  throw new IllegalArgumentException("This branch should never be executed.");
          }
      }
  
  }
  