Skip to content

Commit

Permalink
Merge pull request #5 from shuoj/feat/judge-result
Browse files Browse the repository at this point in the history
feat: judge result
  • Loading branch information
kastnerorz authored Oct 29, 2019
2 parents f0d4bcb + 1939f27 commit 91afe63
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 19 deletions.
25 changes: 15 additions & 10 deletions src/main/java/cn/kastner/oj/constant/LanguageConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ public class LanguageConfig {
private static final String[] PYTHON_3_ENV = {
"PYTHONIOENCODING=UTF-8", "LANG=en_US.UTF-8", "LANGUAGE=en_US:en", "LC_ALL=en_US.UTF-8"
};
private static final Object C_LANG = CLangConfig();
private static final Object CPP_LANG = CPPLangConfig();
private static final Object JAVA_LANG = JAVALangConfig();
private static final Object PYTHON_2_LANG = PYTHON2LangConfig();
private static final Object PYTHON_3_LANG = PYTHON3LangConfig();
private static final Object C_LANG = cLangConfig();
private static final Object CPP_LANG = cppLangConfig();
private static final Object JAVA_LANG = javaLangConfig();
private static final Object PYTHON_2_LANG = python2LangConfig();
private static final Object PYTHON_3_LANG = python3LangConfig();

public static Object getLanguageConfig(Language language) {
switch (language) {
Expand All @@ -26,13 +26,18 @@ public static Object getLanguageConfig(Language language) {
case CPP:
return CPP_LANG;
case JAVA:
return JAVA_LANG;
case PYTHON2:
return PYTHON_2_LANG;
case PYTHON3:
return PYTHON_3_LANG;

default:
return new HashMap<String, String>();
}
}

private static Map<String, Object> CLangConfig() {
private static Map<String, Object> cLangConfig() {
Map<String, Object> map = new HashMap<>();

Map<String, Object> compile =
Expand All @@ -50,7 +55,7 @@ private static Map<String, Object> CLangConfig() {
return map;
}

private static Map<String, Object> CPPLangConfig() {
private static Map<String, Object> cppLangConfig() {
Map<String, Object> map = new HashMap<>();
Map<String, Object> compile =
getCompile(
Expand All @@ -67,7 +72,7 @@ private static Map<String, Object> CPPLangConfig() {
return map;
}

private static Map<String, Object> JAVALangConfig() {
private static Map<String, Object> javaLangConfig() {
Map<String, Object> map = new HashMap<>();
map.put("name", "java");

Expand All @@ -89,7 +94,7 @@ private static Map<String, Object> JAVALangConfig() {
return map;
}

private static Map<String, Object> PYTHON2LangConfig() {
private static Map<String, Object> python2LangConfig() {
Map<String, Object> map = new HashMap<>();

Map<String, Object> compile =
Expand All @@ -110,7 +115,7 @@ private static Map<String, Object> PYTHON2LangConfig() {
return map;
}

private static Map<String, Object> PYTHON3LangConfig() {
private static Map<String, Object> python3LangConfig() {
Map<String, Object> map = new HashMap<>();

Map<String, Object> compile =
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/cn/kastner/oj/domain/JudgeResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,10 @@ public class JudgeResult {
private Integer memory;
private Integer realTime;
private String message;
private Integer totalCount;
private Integer passedCount;
private Integer wrongAnswerCount;
private Integer cpuTimeLimitExceededCount;
private Integer timeLimitExceededCount;
private Integer memoryLimitExceededCount;
}
3 changes: 3 additions & 0 deletions src/main/java/cn/kastner/oj/domain/Submission.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ public class Submission {
@Enumerated(EnumType.STRING)
private Result result;

@Column(columnDefinition = "TEXT")
private String resultDetail;

public Submission() {
this.id = UUID.randomUUID().toString();
this.createDate = LocalDateTime.now();
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/cn/kastner/oj/dto/GroupDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ public class GroupDTO {

private String id;

private String idx;

@NotBlank(message = "组名不能为空")
private String name;

Expand Down
2 changes: 2 additions & 0 deletions src/main/java/cn/kastner/oj/dto/SubmissionDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,7 @@ public class SubmissionDTO implements Serializable {

private String result;

private String resultDetail;

private Boolean shared;
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public ProblemServiceImpl(

@Override
public List<ProblemDTO> findProblemNoCriteria(Integer page, Integer size) {
Pageable pageable = PageRequest.of(page, size, Sort.Direction.ASC, "id");
Pageable pageable = PageRequest.of(page, size, Sort.Direction.ASC, "idx");
List<Problem> problemList = problemRepository.findAll(pageable).getContent();
return mapper.toProblemDTOs(problemList);
}
Expand All @@ -76,7 +76,7 @@ public List<ProblemDTO> findProblemNoCriteria(Integer page, Integer size) {
public PageDTO<ProblemDTO> findProblemCriteria(
Integer page, Integer size, ProblemQuery problemQuery) {
User user = UserContext.getCurrentUser();
Pageable pageable = PageRequest.of(page, size, Sort.Direction.ASC, "id");
Pageable pageable = PageRequest.of(page, size, Sort.Direction.ASC, "idx");
Specification<Problem> ps =
(root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> predicateList = new ArrayList<>();
Expand Down Expand Up @@ -222,7 +222,7 @@ private List<Tag> validateTagList(Problem problem) {
if (tagOptional.isPresent()) {
Tag tag = tagOptional.get();
tag.setProblemCount(tag.getProblemCount() + 1);
tagList.add(tagOptional.get());
tagList.add(tag);
} else {
Tag newTag = new Tag();
newTag.setName(t.getName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ public SubmissionDTO createContestSubmission(SubmissionDTO submissionDTO)

submission.setDuration(judgeResult.getRealTime());
submission.setResult(judgeResult.getResult());
submission.setResultDetail(JSON.toJSONString(judgeResult));
submission.setMemory(judgeResult.getMemory());
submissionRepository.save(submission);
ContestProblem contestProblem =
Expand Down Expand Up @@ -290,6 +291,7 @@ public SubmissionDTO createPracticeSubmission(SubmissionDTO submissionDTO)

submission.setDuration(judgeResult.getRealTime());
submission.setResult(judgeResult.getResult());
submission.setResultDetail(JSON.toJSONString(judgeResult));
submission.setMemory(judgeResult.getMemory());
return mapper.entityToDTO(submissionRepository.save(submission));
}
Expand All @@ -314,6 +316,7 @@ public SubmissionDTO rejudgeSubmission(String id) throws SubmissionException {

submission.setDuration(judgeResult.getRealTime());
submission.setResult(judgeResult.getResult());
submission.setResultDetail(JSON.toJSONString(judgeResult));
submission.setMemory(judgeResult.getMemory());
if (contestProblem.getFirstSubmission() == null) {
contestProblem.setFirstSubmission(submission);
Expand Down Expand Up @@ -502,7 +505,13 @@ private JudgeResult judge(Submission submission, Problem problem) throws Submiss
Integer maxMemory = 0;
Integer maxCPUTime = 0;
Integer maxRealTime = 0;
Integer passedCount = 0;
Integer wrongAnswerCount = 0;
Integer cpuTimeLimitExceededCount = 0;
Integer timeLimitExceededCount = 0;
Integer memoryLimitExceededCount = 0;
result.setResult(Result.ACCEPTED);
boolean resultResolved = false;
for (JudgeResponse res : data) {
if (res.getCpu_time() > maxCPUTime) {
maxCPUTime = res.getCpu_time();
Expand All @@ -513,18 +522,48 @@ private JudgeResult judge(Submission submission, Problem problem) throws Submiss
if (res.getReal_time() > maxRealTime) {
maxRealTime = res.getReal_time();
}
Integer r = res.getResult();
if (r == 1 || r == 2 || r == 3 || r == 4 || r == 5) {
result.setResult(integerToResult(r));
break;

switch (res.getResult()) {
case 0:
passedCount++;
break;
case -1:
wrongAnswerCount++;
break;
case 1:
cpuTimeLimitExceededCount++;
break;
case 2:
timeLimitExceededCount++;
break;
case 3:
memoryLimitExceededCount++;
default:
}
if (r == -1) {
result.setResult(integerToResult(r));

if (!resultResolved) {
Integer r = res.getResult();
if (r == 1 || r == 2 || r == 3 || r == 4 || r == 5) {
result.setResult(integerToResult(r));
resultResolved = true;
}

if (r == -1) {
result.setResult(integerToResult(r));
resultResolved = true;
}
}

}
result.setCpuTime(maxCPUTime);
result.setMemory(maxMemory);
result.setRealTime(maxRealTime);
result.setTotalCount(data.size());
result.setPassedCount(passedCount);
result.setWrongAnswerCount(wrongAnswerCount);
result.setCpuTimeLimitExceededCount(cpuTimeLimitExceededCount);
result.setMemoryLimitExceededCount(memoryLimitExceededCount);
result.setTimeLimitExceededCount(timeLimitExceededCount);
return result;
}

Expand Down

0 comments on commit 91afe63

Please sign in to comment.