randRange(3, 8) randRange(2, 4) randRange(3, 8) randRange(2, 4) shuffle([ function(C, D, x, y) { return ["+", ["*", C, x], y]; }, function(C, D, x, y) { return ["-", ["*", C, x], y]; }, function(C, D, x, y) { return ["+", x, ["*", C, y]]; }, function(C, D, x, y) { return ["-", x, ["*", C, y]]; }, function(C, D, x, y) { return ["-", ["*", C, x], ["*", D, y]]; }, function(C, D, x, y) { return ["-", ["*", D, x], ["*", C, y]]; }, function(C, D, x, y) { return ["*", x, ["-", y, C]]; }, function(C, D, x, y) { return ["*", ["-", C, x], y]; }, function(C, D, x, y) { return ["+", ["^", x, 2], ["*", D, ["^", y, 2]]]; }, function(C, D, x, y) { return ["+", ["*", D, ["^", x, 2]], ["^", y, 2]]; }, function(C, D, x, y) { return ["-", ["^", x, 2], ["*", D, ["^", y, 2]]]; }, function(C, D, x, y) { return ["-", ["*", D, ["^", x, 2]], ["^", y, 2]]; }, function(C, D, x, y) { return ["-", ["*", D, x], C]; }, function(C, D, x, y) { return ["+", ["*", C, y], D]; }, function(C, D, x, y) { return ["+", ["*", x, y], ["*", D, x], ["-", y]]; } ], 2) !isNaN(expr(FUN1(A, B, 0, NaN), true)) !isNaN(expr(FUN1(A, B, NaN, 0), true)) randRange(-6, 6) randRange(-6, 6) randRange(-6, 6) expr(FUN2(C, D, "x", "y")) expr(FUN2(C, D, Y, Z)) expr(FUN2(C, D, Y, Z), true) expr(FUN1(A, B, "x", "y")) shuffle([ "<code>x " + binop(1) + " y = " + TEXT1 + "</code>", "<code>x " + binop(2) + " y = " + TEXT2 + "</code>" ]).join(" and ")
expr(FUN1(A, B, X, VALU2)) expr(FUN1(A, B, X, VALU2), true) !FUN1_XONLY "left"

If TEXTS, find X binop(1) (Y binop(2) Z).

VALU1

NEED_VALU1 ? "Now, find" : "Find" X binop(1) NEED_VALU1 ? VALU2 : "y":

\qquad X binop(1) NEED_VALU1 ? VALU2 : "y" = SUBS1

\qquad \hphantom{X binop(1) NEED_VALU1 ? VALU2 : "y"} = VALU1.

expr(FUN1(A, B, VALU2, X)) expr(FUN1(A, B, VALU2, X), true) !FUN1_YONLY "right"

If TEXTS, find (Y binop(2) Z) binop(1) X.

VALU1

NEED_VALU1 ? "Now, find" : "Find" NEED_VALU1 ? VALU2 : "x" binop(1) X:

\qquad NEED_VALU1 ? VALU2 : "x" binop(1) X = SUBS1

\qquad \hphantom{NEED_VALU1 ? VALU2 : "x" binop(1) X} = VALU1.

First, find Y binop(2) Z:

\qquad Y binop(2) Z = SUBS2

\qquad \hphantom{Y binop(2) Z} = VALU2.

We don't need to find Y binop(2) Z because x binop(1) y depends only on the NEED_VALU1_ONLY operand.