From 78dc2519bcbf772e85d1299e7cd12e531590eaa9 Mon Sep 17 00:00:00 2001 From: zjz1993 <1429595365@qq.com> Date: Wed, 31 Jul 2019 18:16:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?update:=20=E6=AF=94=E8=B5=9B=E5=8A=A0?= =?UTF-8?q?=E5=88=86=E9=80=BB=E8=BE=91=E6=9B=B4=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/judger.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/libs/judger.js b/libs/judger.js index cb52392..f04e62a 100644 --- a/libs/judger.js +++ b/libs/judger.js @@ -5,6 +5,7 @@ const msgPack = require('msgpack-lite'); const fs = require('fs-extra'); const interface = require('./judger_interfaces'); const judgeResult = require('./judgeResult'); +let Problem = syzoj.model('problem'); const judgeStateCache = new Map(); const progressPusher = require('../modules/socketio'); @@ -158,7 +159,6 @@ async function connect() { } const result = msgPack.decode(payload); - console.log(result); winston.verbose('Received report for task ' + result.taskId); const judge_state = await JudgeState.findOne({ @@ -171,9 +171,18 @@ async function connect() { const convertedResult = judgeResult.convertResult(result.taskId, result.progress); winston.verbose('Reporting report finished: ' + result.taskId); progressPusher.cleanupProgress(result.taskId); - console.log(convertedResult); if (!judge_state) return; - judge_state.score = convertedResult.score; + const problemId = judge_state.problem_id; + let problemQuery = await Problem.createQueryBuilder(); + const problemInfo = await problemQuery.where("id = :id", { id: problemId }).getOne(); + const problem_time_limit = problemInfo.time_limit; + if (judge_state.type_info && convertedResult.statusString === 'Accepted' && convertedResult.time < problem_time_limit * 0.9) { + const beyondTime = problem_time_limit - convertedResult.time; + const extraScore = (beyondTime / problem_time_limit).toString().slice(0,3)*100; + judge_state.score = convertedResult.score + extraScore; + } else { + judge_state.score = convertedResult.score; + } judge_state.pending = false; judge_state.status = convertedResult.statusString; judge_state.total_time = convertedResult.time; From 3e70e90f9aee82e73c589a72e16af9484042cb26 Mon Sep 17 00:00:00 2001 From: zjz1993 <1429595365@qq.com> Date: Wed, 31 Jul 2019 19:47:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?update:=20=E8=AE=A1=E7=AE=97=E9=A2=9D?= =?UTF-8?q?=E5=A4=96=E5=8A=A0=E5=88=86=E6=97=B6=E6=94=B9=E7=94=A8=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E5=8D=95=E9=A1=B9=E6=97=B6=E9=97=B4=E4=B8=BA=E5=9F=BA?= =?UTF-8?q?=E5=87=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/judger.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/libs/judger.js b/libs/judger.js index f04e62a..80fd6f3 100644 --- a/libs/judger.js +++ b/libs/judger.js @@ -176,8 +176,26 @@ async function connect() { let problemQuery = await Problem.createQueryBuilder(); const problemInfo = await problemQuery.where("id = :id", { id: problemId }).getOne(); const problem_time_limit = problemInfo.time_limit; - if (judge_state.type_info && convertedResult.statusString === 'Accepted' && convertedResult.time < problem_time_limit * 0.9) { - const beyondTime = problem_time_limit - convertedResult.time; + const subtasksArray = convertedResult.result.judge.subtasks; + const timeArray = subtasksArray.map((subtasksItem) => { + return subtasksItem.cases.map((subtasksItemCases) => { + return subtasksItemCases.result.time + }) + }); + function flat(array, result=[]){ + for (let i=0;i