private EquationCollection generate_equations() { EquationCollection result = new EquationCollection(); foreach (int term_left in LeftRange.Values) { foreach (int term_right in RightRange.Values) { if (Operation == OperationEnum.Division) { if (term_left % term_right != 0) { continue; } } int term_result = 0; switch (Operation) { case OperationEnum.Addition: term_result = term_left + term_right; break; case OperationEnum.Substraction: term_result = term_left - term_right; break; case OperationEnum.Multiplication: term_result = term_left * term_right; break; case OperationEnum.Division: term_result = term_left / term_right; break; } if (ResultRange.Includes(term_result)) { Equation eq = new Equation(term_left, Operation, term_right, term_result); result.Add(eq); } } } return(result); }
private void re_build_selection() { EquationCollection result = new EquationCollection(Solutions); if (Selection_Randomized) { for (int i = 0; i < result.Count; i++) { int i0 = randomizer.Next(result.Count); int i1 = randomizer.Next(result.Count); if (i0 != i1) { Equation e = result[i0]; result[i0] = result[i1]; result[i1] = e; } } } if (Selection_Limit < result.Count) { result = new EquationCollection(result.Take(Selection_Limit)); } Selection = result; }
public EquationGenerator(Range left_range, OperationEnum op, Range right_range, Range result_range) { LeftRange = left_range; RightRange = right_range; ResultRange = result_range; Operation = op; Solutions = generate_equations(); ElipsisPosition = ElipsisPositionEnum.Result; re_build_selection(); }