|
|
|
@ -15,27 +15,27 @@ public class SeniorProblem implements ProblemsGenerator {
|
|
|
|
|
public String generate() {
|
|
|
|
|
String expression;
|
|
|
|
|
boolean hasTrig;
|
|
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
// 生成基础表达式并添加括号
|
|
|
|
|
int numCount = RANDOM.nextInt(5) + 1;
|
|
|
|
|
expression = expressionBuilder.generateBasicExpression(numCount);
|
|
|
|
|
List<Integer> numPositions = expressionBuilder.getNumberPositions(expression);
|
|
|
|
|
expression = bracketManager.addNestedParentheses(expression);
|
|
|
|
|
|
|
|
|
|
if (RANDOM.nextDouble() < 0.8) {
|
|
|
|
|
int pairs = bracketManager.decideParenthesesPairs(numCount);
|
|
|
|
|
if (pairs > 0) {
|
|
|
|
|
expression = bracketManager.addParentheses(expression, pairs, numPositions);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 获取初始数字位置
|
|
|
|
|
List<Integer> numPositions = expressionBuilder.getNumberPositions(expression);
|
|
|
|
|
|
|
|
|
|
// 添加三角函数并检查是否存在
|
|
|
|
|
// 添加三角函数并重新获取数字位置
|
|
|
|
|
expression = trigManager.addTrigOperations(expression, numPositions);
|
|
|
|
|
List<Integer> trigPositions = expressionBuilder.getNumberPositions(expression);
|
|
|
|
|
hasTrig = expression.contains("sin") || expression.contains("cos") || expression.contains("tan");
|
|
|
|
|
List<Integer> numPositionsAfterTrig = expressionBuilder.getNumberPositions(expression);
|
|
|
|
|
|
|
|
|
|
// 40% 概率加幂运算,避免与 trig 重叠
|
|
|
|
|
if (RANDOM.nextDouble() < 0.4) {
|
|
|
|
|
expression = powerManager.addPowerOperationsAvoid(expression, numPositions, trigPositions);
|
|
|
|
|
// 判断是否包含三角函数
|
|
|
|
|
hasTrig = expression.contains("sin") || expression.contains("cos") || expression.contains("tan");
|
|
|
|
|
// 添加幂运算,50%概率执行
|
|
|
|
|
if (RANDOM.nextDouble() < 0.5) {
|
|
|
|
|
expression = powerManager.addPowerOperations(expression, numPositionsAfterTrig, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} while (expressionBuilder.hasDivideByZero(expression) || !hasTrig);
|
|
|
|
|
|
|
|
|
|
return expression;
|
|
|
|
|