|
|
@@ -18,8 +18,8 @@ public class CoderServiceImpl implements CoderService {
|
|
|
@Autowired
|
|
|
CoderRepository coderRepository;
|
|
|
|
|
|
- final double HEIGH = 1.05;
|
|
|
- final double HEIGH_MIDDLE = 1.0;
|
|
|
+ final double HIGH = 1.05;
|
|
|
+ final double HIGH_MIDDLE = 1.0;
|
|
|
final double MIDDLE_LOW = 0.95;
|
|
|
final double LOW = 0.85;
|
|
|
|
|
|
@@ -31,7 +31,7 @@ public class CoderServiceImpl implements CoderService {
|
|
|
AtomicReference<Double> sumGrade = new AtomicReference<>(0.0);
|
|
|
List<CoderDao> coderInfoByUser = coderRepository.findByUserId(userId);
|
|
|
coderInfoByUser.forEach(info -> {
|
|
|
- double[] weight = new double[]{1.0, 1.0};
|
|
|
+ double weight = 1.0;
|
|
|
Integer score = info.getScore();
|
|
|
Integer problemId = info.getProblemId();
|
|
|
Integer examId = info.getExamId();
|
|
|
@@ -42,27 +42,17 @@ public class CoderServiceImpl implements CoderService {
|
|
|
commitTimeQuartiles.add(coderDaoList.get(coderDaoList.size()/4).getSubmitAt());
|
|
|
commitTimeQuartiles.add(coderDaoList.get(coderDaoList.size()*2/4).getSubmitAt());
|
|
|
commitTimeQuartiles.add(coderDaoList.get(coderDaoList.size()*3/4).getSubmitAt());
|
|
|
- if(lastCommitAt.compareTo(commitTimeQuartiles.get(0))<=0) weight[0] = HEIGH;
|
|
|
- else if(lastCommitAt.compareTo(commitTimeQuartiles.get(1))<=0) weight[0] = HEIGH_MIDDLE;
|
|
|
- else if(lastCommitAt.compareTo(commitTimeQuartiles.get(2))<=0) weight[0] = MIDDLE_LOW;
|
|
|
- else weight[0] = LOW;
|
|
|
+ if(lastCommitAt.compareTo(commitTimeQuartiles.get(0))<=0) weight = HIGH;
|
|
|
+ else if(lastCommitAt.compareTo(commitTimeQuartiles.get(1))<=0) weight = HIGH_MIDDLE;
|
|
|
+ else if(lastCommitAt.compareTo(commitTimeQuartiles.get(2))<=0) weight = MIDDLE_LOW;
|
|
|
+ else weight = LOW;
|
|
|
|
|
|
- Comparator<? super CoderDao> comparator = (Comparator<CoderDao>) (coderDao, t1) -> coderDao.getScore() - t1.getScore();
|
|
|
- coderDaoList.sort(comparator);
|
|
|
- ArrayList<Integer> scoreQuartiles = new ArrayList<>(3);
|
|
|
- scoreQuartiles.add(coderDaoList.get(coderDaoList.size()/4).getScore());
|
|
|
- scoreQuartiles.add(coderDaoList.get(coderDaoList.size()*2/4).getScore());
|
|
|
- scoreQuartiles.add(coderDaoList.get(coderDaoList.size()*3/4).getScore());
|
|
|
- if(score.compareTo(scoreQuartiles.get(0))<=0) weight[1] = HEIGH;
|
|
|
- else if(score.compareTo(scoreQuartiles.get(1))<=0) weight[1] = HEIGH_MIDDLE;
|
|
|
- else if(score.compareTo(scoreQuartiles.get(2))<=0) weight[1] = MIDDLE_LOW;
|
|
|
- else weight[1] = LOW;
|
|
|
-
|
|
|
- grade.updateAndGet(v -> v + weight[0] * weight[1] * score);
|
|
|
+ double finalWeight = weight;
|
|
|
+ grade.updateAndGet(v -> v + finalWeight * score);
|
|
|
sumGrade.updateAndGet(v -> v + MAX_SCORE);
|
|
|
});
|
|
|
|
|
|
double result = grade.get() / sumGrade.get();
|
|
|
- return Math.min(result, 1.0);
|
|
|
+ return Math.min(result, 1.0) * 100;
|
|
|
}
|
|
|
}
|