parent
3d016d0eec
commit
1b3ae88cf4
@ -1,21 +1,107 @@
|
||||
import java.util.Random;
|
||||
|
||||
public class SeniorProblem implements ProblemsGenerator{
|
||||
private static final Random RANDOM = new Random();
|
||||
private static final String[] FUNCS = {"sin", "cos", "tan"};
|
||||
|
||||
@Override
|
||||
public String generate() {
|
||||
int count = RANDOM.nextInt(5) + 1; // 1~5个数
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < count; i++) {
|
||||
int angle = RANDOM.nextInt(90) + 1;
|
||||
String func = FUNCS[RANDOM.nextInt(FUNCS.length)];
|
||||
sb.append(func).append("(").append(angle).append("°)");
|
||||
if (i < count - 1) {
|
||||
sb.append(" + ");
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
import java.util.Random;
|
||||
|
||||
public class SeniorProblem implements ProblemsGenerator {
|
||||
private static final Random RANDOM = new Random();
|
||||
private static final String[] OPERATORS = {"+", "-", "*", "/"};
|
||||
private static final String[] POW_OPERATORS = {"√", "^2"};
|
||||
private static final String[] TRIG_OPERATORS = {"sin", "cos", "tan"};
|
||||
|
||||
@Override
|
||||
public String generate() {
|
||||
String primaryExpression = generatePrimaryExpression();
|
||||
|
||||
return addHighSchoolOperators(primaryExpression);
|
||||
}
|
||||
|
||||
private String generatePrimaryExpression() {
|
||||
int count = RANDOM.nextInt(4) + 2;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
int num = RANDOM.nextInt(100) + 1;
|
||||
sb.append(num);
|
||||
if (i < count - 1) {
|
||||
sb.append(" ").append(OPERATORS[RANDOM.nextInt(OPERATORS.length)]).append(" ");
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String addHighSchoolOperators(String primaryExpression) {
|
||||
String[] parts = primaryExpression.split(" ");
|
||||
StringBuilder result = new StringBuilder();
|
||||
boolean hasTrigonometry = false;
|
||||
boolean hasAlgebra = false;
|
||||
|
||||
for (int i = 0; i < parts.length; i++) {
|
||||
String part = parts[i];
|
||||
|
||||
if (isNumber(part)) {
|
||||
if (!hasTrigonometry || RANDOM.nextDouble() < 0.6) {
|
||||
part = applyTrigOperator(part);
|
||||
hasTrigonometry = true;
|
||||
}
|
||||
else if (RANDOM.nextDouble() < 0.3) {
|
||||
part = applyAlgebraOperator(part);
|
||||
hasAlgebra = true;
|
||||
}
|
||||
}
|
||||
|
||||
result.append(part);
|
||||
if (i < parts.length - 1) {
|
||||
result.append(" ");
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasTrigonometry) {
|
||||
return addTrigonometryForced(result.toString());
|
||||
}
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
private boolean isNumber(String str) {
|
||||
try {
|
||||
Integer.parseInt(str);
|
||||
return true;
|
||||
} catch (NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private String applyTrigOperator(String number) {
|
||||
String operator = TRIG_OPERATORS[RANDOM.nextInt(TRIG_OPERATORS.length)];
|
||||
int num = Integer.parseInt(number);
|
||||
int angle = generateValidAngle(operator);
|
||||
return operator + angle + "°";
|
||||
}
|
||||
|
||||
private String applyAlgebraOperator(String number) {
|
||||
String operator = POW_OPERATORS[RANDOM.nextInt(POW_OPERATORS.length)];
|
||||
int num = Integer.parseInt(number);
|
||||
return operator.equals("√") ? "√" + num : num + "^2";
|
||||
}
|
||||
|
||||
private int generateValidAngle(String trigOp) {
|
||||
int angle = RANDOM.nextInt(100) + 1;
|
||||
if (trigOp.equals("tan")) {
|
||||
while (angle == 90) {
|
||||
angle = RANDOM.nextInt(100) + 1;
|
||||
}
|
||||
}
|
||||
return angle;
|
||||
}
|
||||
|
||||
private String addTrigonometryForced(String expression) {
|
||||
String[] parts = expression.split(" ");
|
||||
|
||||
for (int i = 0; i < parts.length; i++) {
|
||||
if (isNumber(parts[i])) {
|
||||
parts[i] = applyTrigOperator(parts[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return String.join(" ", parts);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue