对输出结果进行评判的代码
def judge_result(problem_id, solution_id, data_num):
low_level()
'''对输出数据进行评测'''
logging.debug("Judging result")
correct_result = os.path.join(
config.data_dir, str(problem_id), 'data%s.out' %
data_num)
user_result = os.path.join(
config.work_dir, str(solution_id), 'out%s.txt' %
data_num)
try:
correct = file(
correct_result).read(
).replace(
'\r',
'').rstrip(
) # 删除\r,删除行末的空格和换行
user = file(user_result).read().replace('\r', '').rstrip()
except:
return False
if correct == user: # 完全相同:AC
return "Accepted"
if correct.split() == user.split(): # 除去空格,tab,换行相同:PE
return "Presentation Error"
if correct in user: # 输出多了
return "Output limit"
return "Wrong Answer" # 其他WA
评测代码的时间与内存结果的统计
def judge(solution_id, problem_id, data_count, time_limit,
mem_limit, program_info, result_code, language):
low_level()
'''评测编译类型语言'''
max_mem = 0
max_time = 0
if language in ["java", 'python2', 'python3', 'ruby', 'perl']:
time_limit = time_limit * 2
mem_limit = mem_limit * 16
logging.info("Start to run, total "+ str(data_count) + " times")
for i in range(data_count):
ret = judge_one_mem_time(
solution_id,
problem_id,
i + 1,
time_limit + 10,
mem_limit,
language)
logging.info("The result of "+str(i)+" cycle is "+str(ret))
if ret == False:
continue
if ret['result'] == 5:
program_info['result'] = result_code["Runtime Error"]
return program_info
elif ret['result'] == 2:
program_info['result'] = result_code["Time Limit Exceeded"]
program_info['take_time'] = time_limit + 10
return program_info
elif ret['result'] == 3:
program_info['result'] = result_code["Memory Limit Exceeded"]
program_info['take_memory'] = mem_limit
return program_info
if max_time < ret["timeused"]:
max_time = ret['timeused']
if max_mem < ret['memoryused']:
max_mem = ret['memoryused']
result = judge_result(problem_id, solution_id, i + 1)
if result == False:
continue
if result == "Wrong Answer" or result == "Output limit":
program_info['result'] = result_code[result]
break
elif result == 'Presentation Error':
program_info['result'] = result_code[result]
elif result == 'Accepted':
if program_info['result'] != 'Presentation Error':
program_info['result'] = result_code[result]
else:
logging.error("judge did not get result")
program_info['take_time'] = max_time
program_info['take_memory'] = max_mem
return program_info