计算判题结果
(result *commonStructs.JudgeResult, exitcodes []int)
| 197 | |
| 198 | // 计算判题结果 |
| 199 | func (session *JudgeSession) generateFinallyResult(result *commonStructs.JudgeResult, exitcodes []int) { |
| 200 | var ( |
| 201 | ac, pe, wa int = 0, 0, 0 |
| 202 | ) |
| 203 | for _, exitcode := range exitcodes { |
| 204 | // 如果,不是AC、PE、WA |
| 205 | if exitcode != constants.JudgeFlagWA && exitcode != constants.JudgeFlagPE && exitcode != constants.JudgeFlagAC { |
| 206 | //直接应用结果 |
| 207 | result.JudgeResult = exitcode |
| 208 | return |
| 209 | } |
| 210 | if exitcode == constants.JudgeFlagWA { |
| 211 | wa++ |
| 212 | } |
| 213 | if exitcode == constants.JudgeFlagPE { |
| 214 | pe++ |
| 215 | } |
| 216 | if exitcode == constants.JudgeFlagAC { |
| 217 | ac++ |
| 218 | } |
| 219 | } |
| 220 | // 在严格判题模式下,由于第一组数据不是AC\PE就会直接报错,因此要判定测试数据是否全部跑完。 |
| 221 | if len(exitcodes) != len(session.JudgeConfig.TestCases) { |
| 222 | // 如果测试数据未全部跑完 |
| 223 | result.JudgeResult = constants.JudgeFlagWA |
| 224 | } else { |
| 225 | // 如果测试数据未全部跑了 |
| 226 | if wa > 0 { |
| 227 | // 如果存在WA,报WA |
| 228 | result.JudgeResult = constants.JudgeFlagWA |
| 229 | } else if pe > 0 { // 如果PE > 0 |
| 230 | if !session.JudgeConfig.StrictMode { |
| 231 | // 非严格模式,报AC |
| 232 | result.JudgeResult = constants.JudgeFlagAC |
| 233 | } else { |
| 234 | // 严格模式下报PE |
| 235 | result.JudgeResult = constants.JudgeFlagPE |
| 236 | } |
| 237 | } else { |
| 238 | result.JudgeResult = constants.JudgeFlagAC |
| 239 | } |
| 240 | } |
| 241 | } |