random() < 0.25 randRangeNonZero( -10, 10 ) randRangeNonZero( -10, 10 ) SQUARE ? A : randRangeNonZero( -10, 10 ) SQUARE ? B : randRangeNonZero( -10, 10 ) "x" "x^2" "\\left(" + plus( A+X, B ) + "\\right)" "\\left(" + plus( C+X, D ) + "\\right)"

LEFT + ( SQUARE ? "^2" : RIGHT ) = \ ?

plus( (A*C)+XX, (A*D+B*C)+X, B*D )

  • plus( (A+C)+XX, (A*D+B*C)+X, B*D )
  • plus( (A*C)+XX, (A*D+B*C)+X, B+D )
  • plus( (A+C)+XX, (A*D+B*C)+X, B+D )
  • plus( (A+C)+XX, (A*D-B*C)+X, B*D )
  • plus( (A*C)+XX, (A*D-B*C)+X, B+D )
  • plus( (A+C)+XX, (A*D-B*C)+X, B+D )
  • plus( (A+C)+XX, (A*B+C*D)+X, B*D )
  • plus( (A*C)+XX, (A*B+C*D)+X, B+D )
  • plus( (A+C)+XX, (A*B+C*D)+X, B+D )
  • plus( (A+C)+XX, (A*B-C*D)+X, B*D )
  • plus( (A*C)+XX, (A*B-C*D)+X, B+D )
  • plus( (A+C)+XX, (A*B-C*D)+X, B+D )

= LEFT + RIGHT

= plus( mult( A+X, RIGHT ), mult( B, RIGHT ) )

= plus( parens( mult( A+X, C+X ) ), parens( mult( A+X, D ) ), parens( mult( B, C+X ) ), parens( mult( B, D ) ) )

= plus( (A*C)+XX, parens( mult( A+X, D ) ), parens( mult( B, C+X ) ), parens( mult( B, D ) ) )

= plus( (A*C)+XX, parens( plus( (A*D)+X, (B*C)+X ) ), parens( mult( B, D ) ) )

= plus( (A*C)+XX, (A*D+B*C)+X, parens( mult( B, D ) ) )

= plus( (A*C)+XX, (A*D+B*C)+X, B*D )