protected override IEnumerable <SyntaxTree> CreateOptimalSolutions() { IList <SyntaxTree> trees = new List <SyntaxTree>(); var a = new IntIdentifierExpression("a"); var b = new IntIdentifierExpression("b"); var c = new IntIdentifierExpression("c"); var d = new IntIdentifierExpression("d"); var ret = new IntIdentifierExpression("ret"); var trueVal = new BoolTrueExpression(); var falseVal = new BoolFalseExpression(); var one = new IntLiteralExpression(1); var two = new IntLiteralExpression(2); var three = new IntLiteralExpression(3); var four = new IntLiteralExpression(4); /** * Solution 1 (for 3 parameters): * if (a > b) { * if (a > c) { * ret = a; * } else { * ret = c; * } * } else { * if (b > c) { * ret = b; * } else { * ret = c; * } * } */ if (ParameterCount == 3) { trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolGreaterThanIntExpression() { Children = { a, b } }, new IfStatement() { Children = { new BoolGreaterThanIntExpression() { Children = { a, c } }, new IntAssignmentStatement() { Children = { ret, a } }, new IntAssignmentStatement() { Children = { ret, c } } } }, new IfStatement() { Children = { new BoolGreaterThanIntExpression() { Children = { b, c } }, new IntAssignmentStatement() { Children = { ret, b } }, new IntAssignmentStatement() { Children = { ret, c } } } } } })); } /** * Solution 1 (for 4 parameters): * if (a > b) { * if (a > c) { * if (a > d) { * ret = a; * } else { * ret = d; * } * } else { * if (c > d) { * ret = c; * } else { * ret = d; * } * } * } else { * if (b > c) { * if (b > d) { * ret = b; * } else { * ret = d; * } * } else { * if (c > d) { * ret = c; * } else { * ret = d; * } * } * } */ trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolGreaterThanIntExpression() { Children = { a, b } }, new IfStatement() { Children = { new BoolGreaterThanIntExpression() { Children = { a, c } }, new IfStatement() { Children = { new BoolGreaterThanIntExpression() { Children = { a, d } }, new IntAssignmentStatement() { Children = { ret, a } }, new IntAssignmentStatement() { Children = { ret, d } } } }, new IfStatement() { Children = { new BoolGreaterThanIntExpression() { Children = { c, d } }, new IntAssignmentStatement() { Children = { ret, c } }, new IntAssignmentStatement() { Children = { ret, d } } } }, } }, new IfStatement() { Children = { new BoolGreaterThanIntExpression() { Children = { b, c } }, new IfStatement() { Children = { new BoolGreaterThanIntExpression() { Children = { b, d } }, new IntAssignmentStatement() { Children = { ret, b } }, new IntAssignmentStatement() { Children = { ret, d } } } }, new IfStatement() { Children = { new BoolGreaterThanIntExpression() { Children = { c, d } }, new IntAssignmentStatement() { Children = { ret, c } }, new IntAssignmentStatement() { Children = { ret, d } } } }, } } } })); return(trees); }
protected override IEnumerable <SyntaxTree> CreateOptimalSolutions() { IList <SyntaxTree> trees = new List <SyntaxTree>(); var a = new IntIdentifierExpression("a"); var b = new IntIdentifierExpression("b"); var c = new IntIdentifierExpression("c"); var d = new IntIdentifierExpression("d"); var ret = new BoolIdentifierExpression("ret"); var trueVal = new BoolTrueExpression(); var falseVal = new BoolFalseExpression(); /** * Solution 1 (for 3 parameters): * if (a == b || a == c) { * ret = true; * } else { * ret = false; * } */ if (ParameterCount == 3) { trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolOrExpression() { Children = { new BoolEqualIntExpression() { Children = { a, b } }, new BoolEqualIntExpression() { Children = { a, c } } } }, new BoolAssignmentStatement() { Children = { ret, trueVal } }, new BoolAssignmentStatement() { Children = { ret, falseVal } } } })); } else if (ParameterCount == 4) { trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolOrExpression() { Children = { new BoolOrExpression() { Children = { new BoolEqualIntExpression() { Children = { a, b } }, new BoolEqualIntExpression() { Children = { a, c } } } }, new BoolEqualIntExpression() { Children = { a, d } } } }, new BoolAssignmentStatement() { Children = { ret, trueVal } }, new BoolAssignmentStatement() { Children = { ret, falseVal } } } })); } /** * Solution 2 (for 3 parameters): * if (a != b && a != c) { * ret = false; * } else { * ret = true; * } */ if (ParameterCount == 3) { trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolAndExpression() { Children = { new BoolNotEqualIntExpression() { Children = { a, b } }, new BoolNotEqualIntExpression() { Children = { a, c } } } }, new BoolAssignmentStatement() { Children = { ret, falseVal } }, new BoolAssignmentStatement() { Children = { ret, trueVal } } } })); } else if (ParameterCount == 4) { trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolAndExpression() { Children = { new BoolAndExpression() { Children = { new BoolNotEqualIntExpression() { Children = { a, b } }, new BoolNotEqualIntExpression() { Children = { a, c } } } }, new BoolNotEqualIntExpression() { Children = { a, d } } } }, new BoolAssignmentStatement() { Children = { ret, falseVal } }, new BoolAssignmentStatement() { Children = { ret, trueVal } } } })); } /** * Solution 3 (for 3 parameters): * ret = a == b || a == c; */ if (ParameterCount == 3) { trees.Add(new SyntaxTree(new BoolAssignmentStatement() { Children = { ret, new BoolOrExpression() { Children = { new BoolEqualIntExpression() { Children = { a, b } }, new BoolEqualIntExpression() { Children = { a, c } } } } } })); } else if (ParameterCount == 4) { trees.Add(new SyntaxTree(new BoolAssignmentStatement() { Children = { ret, new BoolOrExpression() { Children = { new BoolOrExpression() { Children = { new BoolEqualIntExpression() { Children = { a, b } }, new BoolEqualIntExpression() { Children = { a, c } } } }, new BoolEqualIntExpression() { Children = { a, d } } } } } })); } return(trees); }
protected override IEnumerable <SyntaxTree> CreateOptimalSolutions() { IList <SyntaxTree> trees = new List <SyntaxTree>(); var a = new IntIdentifierExpression("a"); var b = new IntIdentifierExpression("b"); var c = new IntIdentifierExpression("c"); var d = new IntIdentifierExpression("d"); var ret = new BoolIdentifierExpression("ret"); var trueVal = new BoolTrueExpression(); var falseVal = new BoolFalseExpression(); var one = new IntLiteralExpression(1); var two = new IntLiteralExpression(2); var three = new IntLiteralExpression(3); var four = new IntLiteralExpression(4); /** * Solution 1 (for 3 parameters): * if (((a == 1 && b == 1) || (b == 1 && c == 1)) || (a == 1 && c == 1)) { * ret = true; * } else { * ret = false; * } */ if (ParameterCount == 3) { trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolOrExpression() { Children = { new BoolOrExpression() { Children = { new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new BoolEqualIntExpression() { Children = { b, one } } } }, new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { b, one } }, new BoolEqualIntExpression() { Children = { c, one } } } } } }, new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new BoolEqualIntExpression() { Children = { c, one } } } } } }, new BoolAssignmentStatement() { Children = { ret, trueVal } }, new BoolAssignmentStatement() { Children = { ret, falseVal } } } })); } /** * Solution 1 (for 4 parameters): * if (((a == 1 && b == 1) && c == 1) || (a == 1 && b == 1) && d == 1)) || * ((a == 1 && c == 1) && d == 1) || (b == 1 && c == 1) && d == 1))) { * ret = true; * else { * ret = false; * } */ if (ParameterCount == 4) { trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolOrExpression() { Children = { new BoolOrExpression() { Children = { new BoolAndExpression() { Children = { new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new BoolEqualIntExpression() { Children = { b, one } } } }, new BoolEqualIntExpression() { Children = { c, one } } } }, new BoolAndExpression() { Children = { new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new BoolEqualIntExpression() { Children = { b, one } } } }, new BoolEqualIntExpression() { Children = { d, one } } } } } }, new BoolOrExpression() { Children = { new BoolAndExpression() { Children = { new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new BoolEqualIntExpression() { Children = { c, one } } } }, new BoolEqualIntExpression() { Children = { d, one } } } }, new BoolAndExpression() { Children = { new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { b, one } }, new BoolEqualIntExpression() { Children = { c, one } } } }, new BoolEqualIntExpression() { Children = { d, one } } } } } } } }, new BoolAssignmentStatement() { Children = { ret, trueVal } }, new BoolAssignmentStatement() { Children = { ret, falseVal } } } })); } /** * Solution 2 (for 3 parameters): * ret = (((a == 1 && b == 1) || (b == 1 && c == 1)) || (a == 1 && c == 1)) */ if (ParameterCount == 3) { trees.Add(new SyntaxTree(new BoolAssignmentStatement() { Children = { ret, new BoolOrExpression() { Children = { new BoolOrExpression() { Children = { new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new BoolEqualIntExpression() { Children = { b, one } } } }, new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { b, one } }, new BoolEqualIntExpression() { Children = { c, one } } } } } }, new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new BoolEqualIntExpression() { Children = { c, one } } } } } } } })); } /** * Solution 2 (for 4 parameters): * ret = (((a == 1 && b == 1) && c == 1) || (a == 1 && b == 1) && d == 1)) || * ((a == 1 && c == 1) && d == 1) || (b == 1 && c == 1) && d == 1))) */ if (ParameterCount == 4) { trees.Add(new SyntaxTree(new BoolAssignmentStatement() { Children = { ret, new BoolOrExpression() { Children = { new BoolOrExpression() { Children = { new BoolAndExpression() { Children = { new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new BoolEqualIntExpression() { Children = { b, one } } } }, new BoolEqualIntExpression() { Children = { c, one } } } }, new BoolAndExpression() { Children = { new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new BoolEqualIntExpression() { Children = { b, one } } } }, new BoolEqualIntExpression() { Children = { d, one } } } } } }, new BoolOrExpression() { Children = { new BoolAndExpression() { Children = { new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new BoolEqualIntExpression() { Children = { c, one } } } }, new BoolEqualIntExpression() { Children = { d, one } } } }, new BoolAndExpression() { Children = { new BoolAndExpression() { Children = { new BoolEqualIntExpression() { Children = { b, one } }, new BoolEqualIntExpression() { Children = { c, one } } } }, new BoolEqualIntExpression() { Children = { d, one } } } } } } } } } })); } return(trees); }