Sha256: 488475d865935a21e8680ecf2d5b77ff4ab547119b64b9fa52db19c5b67c6a6c

Contents?: true

Size: 1.95 KB

Versions: 358

Compression:

Stored size: 1.95 KB

Contents

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.");
        }
    }

}

Version data entries

358 entries across 358 versions & 1 rubygems

Version Path
trackler-2.2.1.78 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.77 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.76 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.75 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.74 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.73 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.72 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.71 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.70 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.69 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.68 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.67 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.66 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.65 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.64 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.63 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.62 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.61 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.60 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java
trackler-2.2.1.59 tracks/java/exercises/wordy/.meta/src/reference/java/WordProblemSolver.java