Description:
make .float checker better
Commit status:
[Not Reviewed]
References:
Diff options:
Comments:
0 Commit comments
0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
r239:dbdeebc3336d - - 1 file changed: 9 inserted, 0 deleted
@@ -2,65 +2,74 | |||
|
2 | 2 | |
|
3 | 3 | problem_home = ENV['PROBLEM_HOME'] |
|
4 | 4 | require "#{problem_home}/script/test_dsl.rb" |
|
5 | 5 | |
|
6 | 6 | if ARGV.length < 2 |
|
7 | 7 | puts "Usage: check <language> <test-number> [<output-file>]" |
|
8 | 8 | exit(0) |
|
9 | 9 | end |
|
10 | 10 | |
|
11 | 11 | language = ARGV[0] |
|
12 | 12 | test_num = ARGV[1].to_i |
|
13 | 13 | if ARGV.length >= 3 |
|
14 | 14 | output_file_name = ARGV[2] |
|
15 | 15 | else |
|
16 | 16 | output_file_name = "output.txt" |
|
17 | 17 | end |
|
18 | 18 | |
|
19 | 19 | load "#{problem_home}/test_cases/all_tests.cfg" |
|
20 | 20 | problem = Problem.get_instance |
|
21 | 21 | |
|
22 | 22 | output_file = File.new(output_file_name, "r") |
|
23 | 23 | answer_file = File.new("#{problem_home}/test_cases/#{test_num}/answer-#{test_num}.txt") |
|
24 | 24 | result_file = File.new("check_result", "w") |
|
25 | 25 | |
|
26 | 26 | output_file_content = output_file.read |
|
27 | 27 | answer_file_content = answer_file.read |
|
28 | 28 | |
|
29 | 29 | report_correct = lambda { |
|
30 | 30 | result_file.write "Correct\n" |
|
31 | 31 | result_file.write problem.get_score(test_num) |
|
32 | 32 | result_file.write "\n" |
|
33 | 33 | result_file.close |
|
34 | 34 | exit(0) |
|
35 | 35 | } |
|
36 | 36 | |
|
37 | 37 | report_wrong = lambda { |
|
38 | 38 | result_file.write "Incorrect\n" |
|
39 | 39 | result_file.write "0\n" |
|
40 | 40 | result_file.close |
|
41 | 41 | exit(0) |
|
42 | 42 | } |
|
43 | 43 | |
|
44 | 44 | ################## |
|
45 | 45 | # Your code here # |
|
46 | 46 | ################## |
|
47 | 47 | |
|
48 | 48 | ########### THIS IS FOR CHECKING FLOAT with EPSILON error ########## |
|
49 | 49 | |
|
50 | + | |
|
51 | + def is_float?(fl) | |
|
52 | + !!Float(fl) rescue false | |
|
53 | + end | |
|
54 | + | |
|
50 | 55 | EPSILON = 0.000001 |
|
51 | 56 | |
|
52 | 57 | out_items = output_file_content.split |
|
53 | 58 | ans_items = answer_file_content.split |
|
54 | 59 | |
|
55 | 60 | if out_items.length != ans_items.length |
|
56 | 61 | report_wrong.call |
|
57 | 62 | else |
|
58 | 63 | out_items.length.times do |i| |
|
64 | + if is_float?(out_items[i]) && is_float?(ans_items[i]) | |
|
59 | 65 | out_value = out_items[i].to_f |
|
60 | 66 | ans_value = ans_items[i].to_f |
|
61 | 67 | if (out_value - ans_value).abs > EPSILON * [out_value.abs,ans_value.abs].max |
|
62 | 68 | report_wrong.call |
|
63 | 69 | end |
|
70 | + else | |
|
71 | + report_wrong.call if out_items[i] != ans_items[i] | |
|
72 | + end | |
|
64 | 73 | end |
|
65 | 74 | report_correct.call |
|
66 | 75 | end |
You need to be logged in to leave comments.
Login now