Fix average working time for nil values and empty filtered collections
This commit is contained in:
@ -61,16 +61,25 @@ namespace :detect_exercise_anomalies do
|
|||||||
.having('count(exercises_with_submissions.id) > ?', number_of_exercises)
|
.having('count(exercises_with_submissions.id) > ?', number_of_exercises)
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_anomalies(collection)
|
def collect_working_times(collection)
|
||||||
working_times = {}
|
working_times = {}
|
||||||
collection.exercises.each do |exercise|
|
collection.exercises.each do |exercise|
|
||||||
puts "\t\t> #{exercise.title}"
|
puts "\t\t> #{exercise.title}"
|
||||||
working_times[exercise.id] = get_average_working_time(exercise)
|
working_times[exercise.id] = get_average_working_time(exercise)
|
||||||
end
|
end
|
||||||
average = working_times.values.reduce(:+) / working_times.size
|
working_times
|
||||||
working_times.select do |exercise_id, working_time|
|
end
|
||||||
working_time > average * MAX_TIME_FACTOR or working_time < average * MIN_TIME_FACTOR
|
|
||||||
|
def find_anomalies(collection)
|
||||||
|
working_times = collect_working_times(collection)
|
||||||
|
values = working_times.values.reject {|value| value.nil?}
|
||||||
|
if working_times.size > 0
|
||||||
|
average = values.reduce(:+) / working_times.size
|
||||||
|
return working_times.select do |_, working_time|
|
||||||
|
working_time > average * MAX_TIME_FACTOR or working_time < average * MIN_TIME_FACTOR
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
{}
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_average_working_time(exercise)
|
def get_average_working_time(exercise)
|
||||||
|
Reference in New Issue
Block a user