Show More
Commit Description:
Merge pull request #14 from nattee/master...
Commit Description:
Merge pull request #14 from nattee/master
upgrade to current working snapshot
References:
File last commit:
Show/Diff file:
Action:
templates/check.float
| 75 lines
| 1.6 KiB
| text/plain
| TextLexer
|
r153 | #!/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 ########## | ||||
r239 | ||||
def is_float?(fl) | ||||
!!Float(fl) rescue false | ||||
end | ||||
r153 | 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| | ||||
r239 | 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] | ||||
r153 | end | |||
end | ||||
report_correct.call | ||||
end | ||||