Description:
fix unintended branch
Commit status:
[Not Reviewed]
References:
merge default
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r815:501db8f544da - - 23 files changed: 89 inserted, 181 deleted

@@ -0,0 +1,89
1 + def display_manual
2 + puts <<-USAGE
3 + subtask_score problem last_submision_id sub1_score,sub2_score,sub3_score,....
4 + example:
5 + rails runner subtask_score.rb o64_may26_train 102983 10,15,18,18,39
6 + USAGE
7 + end
8 +
9 + def process_options
10 + res = {}
11 + if ARGV.length == 0
12 + display_manual
13 + exit(1)
14 + end
15 +
16 + res[:prob] = ARGV[0]
17 + res[:last_sub_id] = ARGV[1].to_i
18 + res[:score] = ARGV[2].split(',').map {|x| x.to_i}
19 + return res
20 + end
21 +
22 + def process_subtask(st)
23 + return true if /^P+$/.match(st)
24 + return false
25 + end
26 +
27 + def process_comment(st)
28 + res = []
29 + loop do
30 + break if st.length == 0
31 + if st[0] == '['
32 + #subtask
33 + subtask = st.slice!(0..(st.index(']')))
34 + res << process_subtask(subtask[1..-2])
35 + else #not subtask
36 + res << process_subtask(st[0])
37 + st.slice!(0)
38 + end
39 + end
40 + return res
41 + end
42 +
43 + options = process_options
44 + scoring = options[:score]
45 + puts "doing problem #{options[:prob]}"
46 + puts " consider only submission with id not more than #{options[:last_sub_id]}"
47 + scoring.each.with_index { |x,i| puts " subtask#{i}: #{x}" }
48 +
49 + res = {}
50 +
51 + p = Problem.where(name: options[:prob]).first
52 + unless p
53 + puts "Problem #{options[:prob]} not found"
54 + exit(2)
55 + end
56 +
57 + p.submissions.where('id <= ?',options[:last_sub_id]).order(:id).each do |sub|
58 + unless sub.graded_at
59 + puts "skip ungraded submission #{sub.id}"
60 + next
61 + end
62 + if sub.grader_comment == "compilation error"
63 + puts "skip uncompilable submission #{sub.id}"
64 + next
65 + end
66 +
67 + comment = sub.grader_comment.clone
68 + comment_result = process_comment(comment)
69 + if comment_result.length != scoring.length
70 + puts "ERROR!!! subtask of submission #{sub.id} does not match scoring input"
71 + end
72 +
73 + puts "processing submission #{sub.id} with comment = #{sub.grader_comment} result is #{comment_result}"
74 + current = res[sub.user.login] || [false] * scoring.length
75 + current.each.with_index do |x,i|
76 + if !x && comment_result[i]
77 + puts " user #{sub.user.login} just got subtask #{i+1} from this submission"
78 + current[i] = true
79 + end
80 + end
81 + res[sub.user.login] = current
82 + end
83 +
84 + puts "----summary-----"
85 + res.each do |u,r|
86 + score = scoring.clone
87 + r.each.with_index { |pass,i| score[i] = 0 unless pass }
88 + puts "#{u} #{score.sum} [#{score.join(',')}]"
89 + end
deleted file
deleted file
deleted file
deleted file
deleted file
deleted file
deleted file
You need to be logged in to leave comments. Login now