protected override IEnumerable <SyntaxTree> CreateOptimalSolutions() { IList <SyntaxTree> trees = new List <SyntaxTree>(); var i = new IntIdentifierExpression("i0"); var values = new IntArrayIdentifier("values") { Children = { i } }; var n = new IntIdentifierExpression("length"); var ret = new IntIdentifierExpression("ret"); var zero = new IntLiteralExpression(1); /** * Solution: * for (int i = 0; i < n; i++) { * if (values[i] == 1) { * ret = i; * } * } */ trees.Add(new SyntaxTree(new ForLoopTimesStatement() { Children = { n, new IfStatement() { HasElseClause = false, Children = { new BoolEqualIntExpression() { Children = { values, zero } }, new IntAssignmentStatement() { Children = { ret, i } } } }, } })); return(trees); }
protected override IEnumerable <SyntaxTree> CreateOptimalSolutions() { IList <SyntaxTree> trees = new List <SyntaxTree>(); var n = new IntIdentifierExpression("n"); var ret = new IntIdentifierExpression("ret"); var one = new IntLiteralExpression(1); var two = new IntLiteralExpression(2); var three = new IntLiteralExpression(3); var thousand = new IntLiteralExpression(1000); var twoThousand = new IntLiteralExpression(2000); /** * Solution 1: * if (n < 1000) { * ret = 1; * } else { * if (n < 2000) { * ret = 2; * } else { * ret = 3; * } * } */ trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolLessThanIntExpression() { Children = { n, thousand } }, new IntAssignmentStatement() { Children = { ret, one } }, new IfStatement() { Children = { new BoolLessThanIntExpression() { Children = { n, twoThousand } }, new IntAssignmentStatement() { Children = { ret, two } }, new IntAssignmentStatement() { Children = { ret, three } } } } } })); /** * Solution 2: * if (n >= 1000) { * if (n >= 2000) { * ret = 3; * } else { * ret = 2; * } * } else { * ret = 1; * } */ trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolGreaterEqualIntExpression() { Children = { n, thousand } }, new IfStatement() { Children = { new BoolGreaterEqualIntExpression() { Children = { n, twoThousand } }, new IntAssignmentStatement() { Children = { ret, three } }, new IntAssignmentStatement() { Children = { ret, two } } } }, new IntAssignmentStatement() { Children = { ret, one } } } })); 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 ret = new IntIdentifierExpression("ret"); /** * Solution (for 3 parameters): * if (a >= b) { * if (c >= a) { * ret = a; * } else if (c >= b) { * ret = c; * } else { * ret = b; * } * } else { * if (c >= b) { * ret = b; * } else if (c >= a) { * ret = c; * } else { * ret = a; * } * } */ trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolGreaterEqualIntExpression() { Children = { a, b } }, new IfStatement() { Children = { new BoolGreaterEqualIntExpression() { Children = { c, a } }, new IntAssignmentStatement() { Children = { ret, a } }, new IfStatement() { Children = { new BoolGreaterEqualIntExpression() { Children = { c, b } }, new IntAssignmentStatement() { Children = { ret, c } }, new IntAssignmentStatement() { Children = { ret, b } } } } } }, new IfStatement() { Children = { new BoolGreaterEqualIntExpression() { Children = { c, b } }, new IntAssignmentStatement() { Children = { ret, b } }, new IfStatement() { Children = { new BoolGreaterEqualIntExpression() { Children = { c, a } }, new IntAssignmentStatement() { Children = { ret, c } }, new IntAssignmentStatement() { Children = { ret, a } } } } } } } })); 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 IntIdentifierExpression("ret"); 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) { * ret = ret + 1; * } else { * ret = ret; * } * if (b == 1) { * ret = ret + 1; * } else { * ret = ret; * } * if (c == 1) { * ret = ret + 1; * } else { * ret = ret; * } */ if (ParameterCount == 3) { trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new IntAssignmentStatement() { Children = { ret, new IntAdditionExpression() { Children = { ret, one } } } }, new IntAssignmentStatement() { Children = { ret, ret } } } }, new IfStatement() { Children = { new BoolEqualIntExpression() { Children = { b, one } }, new IntAssignmentStatement() { Children = { ret, new IntAdditionExpression() { Children = { ret, one } } } }, new IntAssignmentStatement() { Children = { ret, ret } } } }, new IfStatement() { Children = { new BoolEqualIntExpression() { Children = { c, one } }, new IntAssignmentStatement() { Children = { ret, new IntAdditionExpression() { Children = { ret, one } } } }, new IntAssignmentStatement() { Children = { ret, ret } } } })); } else if (ParameterCount == 4) { trees.Add(new SyntaxTree(new IfStatement() { Children = { new BoolEqualIntExpression() { Children = { a, one } }, new IntAssignmentStatement() { Children = { ret, new IntAdditionExpression() { Children = { ret, one } } } }, new IntAssignmentStatement() { Children = { ret, ret } } } }, new IfStatement() { Children = { new BoolEqualIntExpression() { Children = { b, one } }, new IntAssignmentStatement() { Children = { ret, new IntAdditionExpression() { Children = { ret, one } } } }, new IntAssignmentStatement() { Children = { ret, ret } } } }, new IfStatement() { Children = { new BoolEqualIntExpression() { Children = { c, one } }, new IntAssignmentStatement() { Children = { ret, new IntAdditionExpression() { Children = { ret, one } } } }, new IntAssignmentStatement() { Children = { ret, ret } } } }, new IfStatement() { Children = { new BoolEqualIntExpression() { Children = { d, one } }, new IntAssignmentStatement() { Children = { ret, new IntAdditionExpression() { Children = { ret, one } } } }, new IntAssignmentStatement() { Children = { ret, ret } } } })); } 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 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(); 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); }