Ejemplo n.º 1
0
  private boolean checkValidity() {
    int answer = mOperation.getResult();
    numbers.clear();
    for (Cell cell : cells.values()) {
      Point p = cell.location();
      numbers.add(mLogic.getValue(p.y, p.x));
    }

    // first check to make sure no elements are zero to avoid early
    // exit errors (e.g., solution = 3, cage is (3,)
    // because default (missing values are zero)
    // also prevent division by zero errors
    for (Integer i : numbers) {
      if (i == 0) {
        return false;
      }
    }
    if (mOperation.isAdd()) {
      int sum = 0;
      for (Integer i : numbers) {
        sum += i;
      }
      return answer == sum;
    } else if (mOperation.isMultiply()) {
      int product = 1;
      for (Integer i : numbers) {
        product *= i;
      }
      return product == answer;
    } else if (mOperation.isSubtract()) {
      return permuteSubtractions(answer, numbers, 0);
    } else if (mOperation.isDivide()) {
      // try all the possible combinations
      // don't just check against the solution. That would make
      // it to easy for a player to fill in missing values
      // by eliminating order-based guesses for them by showing
      // solved cages for only one possible solution out of many
      // (e.g, solution = 2 (4,2) might be ok but (2,4) would not
      return permuteDivision(answer, numbers, 0);
    } else if (numbers.size() == 1) {
      return answer == numbers.get(0);
    }
    return false;
  }