Show More
Commit Description:
merge algo-bm
Commit Description:
merge algo-bm
References:
File last commit:
Show/Diff file:
Action:
templates/check.float | 75 lines | 1.6 KiB | text/plain | TextLexer |
#!/usr/bin/env 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 #
##################
########### THIS IS FOR CHECKING FLOAT with EPSILON error ##########
def is_float?(fl)
!!Float(fl) rescue false
end
EPSILON = 0.000001
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 is_float?(out_items[i]) && is_float?(ans_items[i])
out_value = out_items[i].to_f
ans_value = ans_items[i].to_f
if (out_value - ans_value).abs > EPSILON * [out_value.abs,ans_value.abs].max
report_wrong.call
end
else
report_wrong.call if out_items[i] != ans_items[i]
end
end
report_correct.call
end