Example #1
0
  @Override
  public MoveResult applyMove(
      Equation equation, int moveNum, List<Operation> operations, Operation appliedOrNull) {
    Expression lhs = equation.getLhs();
    Expression rhs = equation.getRhs();
    int num = 0;
    Expression lhsResult = factor(lhs);
    if (lhsResult != null) {
      num++;
    }
    Expression rhsResult = factor(rhs);
    if (rhsResult != null) {
      num++;
    }

    if (num == 1) {
      Expression zero = new Expression(0);
      if (lhs.isZero()) {
        String factored = "0 = (" + rhsResult + ")(" + expr + ")";
        return new MoveResult( //
            new MultipleSolutionMove(
                equation, (appliedOrNull == null ? this : appliedOrNull), factored, moveNum), //
            new SecondaryEquationMove(new Equation(zero, rhsResult), 1), //
            new SecondaryEquationMove(new Equation(zero, expr), 2));
      }
      if (rhs.isZero()) {
        String factored = "(" + lhsResult + ")(" + expr + ") = 0";
        return new MoveResult( //
            new MultipleSolutionMove(
                equation, (appliedOrNull == null ? this : appliedOrNull), factored, moveNum), //
            new SecondaryEquationMove(new Equation(lhsResult, zero), 1), //
            new SecondaryEquationMove(new Equation(expr, zero), 2));
      }
    }
    StringBuilder builder = new StringBuilder();
    if (lhsResult != null) {
      builder.append("(");
      builder.append(lhsResult);
      builder.append(")(");
      builder.append(expr);
      builder.append(")");
    } else {
      builder.append(lhs);
    }
    builder.append(" = ");
    if (rhsResult != null) {
      builder.append("(");
      builder.append(rhsResult);
      builder.append(")(");
      builder.append(expr);
      builder.append(")");
    } else {
      builder.append(rhs);
    }

    FormattedMove move =
        new FormattedMove(
            equation, (appliedOrNull == null ? this : appliedOrNull), builder.toString(), moveNum);
    return new MoveResult(move);
  }
Example #2
0
 @Override
 public boolean canApply(Equation equation) {
   return canApply(equation.getLhs()) || canApply(equation.getRhs());
 }