Show More
Commit Description:
handle the case when problem id or submission id is null. Grader will simply skip such request. Add more report on console (for command line grading)...
Commit Description:
handle the case when problem id or submission id is null. Grader will simply skip such request. Add more report on console (for command line grading)
(mercurial grafted from d233105d3965c5368c9b33125f390e39b25f910e)
References:
File last commit:
Show/Diff file:
Action:
std-script/check
| 84 lines
| 1.7 KiB
| text/plain
| TextLexer
|
r146 | #!/usr/bin/env ruby | |||
|
r0 | |||
problem_home = ENV['PROBLEM_HOME'] | ||||
require "#{problem_home}/script/test_dsl.rb" | ||||
if ARGV.length < 2 | ||||
puts "Usage: check <language> <test-number> [<output-file>]" | ||||
exit(0) | ||||
end | ||||
language = ARGV[0] | ||||
test_num = ARGV[1].to_i | ||||
if ARGV.length >= 3 | ||||
output_file_name = ARGV[2] | ||||
else | ||||
output_file_name = "output.txt" | ||||
end | ||||
load "#{problem_home}/test_cases/all_tests.cfg" | ||||
problem = Problem.get_instance | ||||
output_file = File.new(output_file_name, "r") | ||||
answer_file = File.new("#{problem_home}/test_cases/#{test_num}/answer-#{test_num}.txt") | ||||
result_file = File.new("check_result", "w") | ||||
output_file_content = output_file.read | ||||
answer_file_content = answer_file.read | ||||
report_correct = lambda { | ||||
result_file.write "Correct\n" | ||||
result_file.write problem.get_score(test_num) | ||||
result_file.write "\n" | ||||
result_file.close | ||||
exit(0) | ||||
} | ||||
report_wrong = lambda { | ||||
result_file.write "Incorrect\n" | ||||
result_file.write "0\n" | ||||
result_file.close | ||||
exit(0) | ||||
} | ||||
################## | ||||
# Your code here # | ||||
################## | ||||
|
r9 | |||
puts "YOU HAVE TO EDIT THE CHECKING CODE HERE: #{__FILE__}" | ||||
exit(127) | ||||
|
r10 | # below are codes for checking integer and text | ||
########### THIS IS FOR CHECKING INTEGER ########## | ||||
|
r0 | num_pattern = /^[0-9]*/ | ||
if (output_file_content =~ num_pattern) == nil | ||||
report_wrong.call | ||||
end | ||||
output_i = output_file_content.to_i | ||||
answer_i = answer_file_content.to_i | ||||
if output_i == answer_i | ||||
report_correct.call | ||||
else | ||||
report_wrong.call | ||||
end | ||||
|
r10 | |||
########### THIS IS FOR CHECKING TEXT ########## | ||||
# check visible text | ||||
out_items = output_file_content.split | ||||
ans_items = answer_file_content.split | ||||
if out_items.length != ans_items.length | ||||
report_wrong.call | ||||
else | ||||
out_items.length.times do |i| | ||||
if out_items[i]!=ans_items[i] | ||||
report_wrong.call | ||||
end | ||||
end | ||||
report_correct.call | ||||
end | ||||