Description:
[web] allow check script to inject the comment git-svn-id: http://theory.cpe.ku.ac.th/grader/judge/trunk/scripts@152 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r40:fdbf2dc47aa1 - - 1 file changed: 4 inserted, 2 deleted

@@ -1,86 +1,88
1 1 #!/usr/bin/ruby
2 2
3 3 CORRECT_MARK = 'P'
4 4 INCORRECT_MARK = '-'
5 5 TIMEOUT_MARK = 'T'
6 6 RUN_ERROR_MARK = 'x'
7 7
8 8 def log(str='')
9 9 if ENV['TALKATIVE']!=nil
10 10 puts str
11 11 end
12 12 if ENV['GRADER_LOGGING']!=nil
13 13 log_fname = ENV['GRADER_LOGGING']
14 14 fp = File.open(log_fname,"a")
15 15 fp.puts("grade: #{Time.new.strftime("%H:%M")} #{str}")
16 16 fp.close
17 17 end
18 18 end
19 19
20 20 def char_comment(comment)
21 - if comment =~ /[iI]ncorrect/
21 + if comment =~ /[Ii]ncorrect/
22 22 INCORRECT_MARK
23 23 elsif comment =~ /[Cc]orrect/
24 24 CORRECT_MARK
25 25 elsif comment =~ /[Tt]ime/
26 26 TIMEOUT_MARK
27 + elsif res = /^[Cc]omment:(.*)$/.match(comment)
28 + res[1]
27 29 else
28 30 RUN_ERROR_MARK # these are run time errors
29 31 end
30 32 end
31 33
32 34 problem_home = ENV['PROBLEM_HOME']
33 35 require "#{problem_home}/script/test_dsl.rb"
34 36 load "#{problem_home}/test_cases/all_tests.cfg"
35 37 problem = Problem.get_instance
36 38
37 39 if problem.well_formed? == false
38 40 log "The problem specification is not well formed."
39 41 exit(127)
40 42 end
41 43
42 44 all_score = 0
43 45 all_comment = ''
44 46 (1..(problem.runs.length-1)).each do |k|
45 47 log "grade run #{k}"
46 48 run = problem.runs[k]
47 49 run_score = 0
48 50 run_comment = ''
49 51 run_comment_short = ''
50 52 run.tests.each do |test_num|
51 53 result_file_name = "#{test_num}/result"
52 54 if not File.exists?(result_file_name)
53 55 run_comment += "result file for test #{test_num} not found\n"
54 56 run_comment_short += RUN_ERROR_MARK
55 57 log "Cannot find the file #{test_num}/result!"
56 58 else
57 59 result_file = File.new(result_file_name, "r")
58 60 result_file_lines = result_file.readlines
59 61 if result_file_lines.length>=2
60 62 run_score = run_score + result_file_lines[1].to_i
61 63 run_comment += result_file_lines[0]
62 - run_comment_short += char_comment(result_file_lines[0])
64 + run_comment_short += char_comment(result_file_lines[0].chomp)
63 65 else
64 66 run_comment += "result file for test #{test_num} error\n"
65 67 run_comment_short += RUN_ERROR_MARK
66 68 log "Error in #{test_num}/result!"
67 69 end
68 70 result_file.close
69 71 end
70 72 end
71 73
72 74 # find total score for this run
73 75 run_total_score = 0
74 76 problem = Problem.get_instance
75 77 run.tests.each { |test_num| run_total_score += problem.get_score(test_num) }
76 78
77 79 if run_total_score!=run_score # fail in some test cases, fail the run
78 80 run_score = 0
79 81 end
80 82
81 83 run_result_file = File.new("result-#{k}", "w")
82 84 run_result_file.write run_score
83 85 run_result_file.write "\n"
84 86 run_result_file.close
85 87
86 88 run_comment_file = File.new("comment-#{k}", "w")
You need to be logged in to leave comments. Login now