|
|
|
@ -2,22 +2,50 @@ import java.util.Random;
|
|
|
|
|
|
|
|
|
|
public class JuniorProblem implements ProblemsGenerator {
|
|
|
|
|
private static final Random RANDOM = new Random();
|
|
|
|
|
private static final String[] OPERATORS = {"+", "-", "*", "/"};
|
|
|
|
|
private static final String[] POW_OPERATORS = {"√", "^2"};
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String generate() {
|
|
|
|
|
int count = RANDOM.nextInt(5) + 1; // 1~5个数
|
|
|
|
|
String primaryExpr = generatePrimaryExpression();
|
|
|
|
|
return addPowerOperators(primaryExpr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String generatePrimaryExpression() {
|
|
|
|
|
int count = RANDOM.nextInt(4) + 2;
|
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < count; i++) {
|
|
|
|
|
int num = RANDOM.nextInt(20) + 1;
|
|
|
|
|
if (RANDOM.nextBoolean()) {
|
|
|
|
|
sb.append(num).append("^2");
|
|
|
|
|
} else {
|
|
|
|
|
sb.append("√").append(num);
|
|
|
|
|
}
|
|
|
|
|
sb.append(RANDOM.nextInt(100) + 1);
|
|
|
|
|
if (i < count - 1) {
|
|
|
|
|
sb.append(" + ");
|
|
|
|
|
sb.append(" ").append(OPERATORS[RANDOM.nextInt(OPERATORS.length)]).append(" ");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return sb.toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String addPowerOperators(String expr) {
|
|
|
|
|
String[] parts = expr.split(" ");
|
|
|
|
|
boolean hasPower = false;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < parts.length; i++) {
|
|
|
|
|
if (parts[i].matches("\\d+") && (!hasPower || RANDOM.nextBoolean())) {
|
|
|
|
|
String op = POW_OPERATORS[RANDOM.nextInt(POW_OPERATORS.length)];
|
|
|
|
|
parts[i] = op.equals("√") ? "√" + parts[i] : parts[i] + "^2";
|
|
|
|
|
hasPower = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!hasPower) {
|
|
|
|
|
for (int i = 0; i < parts.length; i++) {
|
|
|
|
|
if (parts[i].matches("\\d+")) {
|
|
|
|
|
String op = POW_OPERATORS[RANDOM.nextInt(POW_OPERATORS.length)];
|
|
|
|
|
parts[i] = op.equals("√") ? "√" + parts[i] : parts[i] + "^2";
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return String.join(" ", parts);
|
|
|
|
|
}
|
|
|
|
|
}
|