|
|
#!/usr/bin/ruby
|
|
|
|
|
|
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 #
|
|
|
##################
|
|
|
|
|
|
puts "YOU HAVE TO EDIT THE CHECKING CODE HERE: #{__FILE__}"
|
|
|
exit(127)
|
|
|
|
|
|
# below are codes for checking integer and text
|
|
|
|
|
|
########### THIS IS FOR CHECKING INTEGER ##########
|
|
|
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
|
|
|
|
|
|
########### 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
|
|
|
|