Skip to content

Instantly share code, notes, and snippets.

@BooneTeam
Created July 10, 2013 23:08
Show Gist options
  • Save BooneTeam/5971037 to your computer and use it in GitHub Desktop.
Save BooneTeam/5971037 to your computer and use it in GitHub Desktop.
Calculates grades and can sort students based on any field.
Struct.new("Student", :scores, :first_name, :last_name, :ssn)
class AverageScores
attr_accessor :scores
def initialize(scores)
@scores = scores
end
def basic_average
scores.inject{|total,grade| total + grade }/ scores.count
end
def letter_grade
case basic_average
when 90..100
"A"
when 80..89
"B"
when 70..79
"C"
when 60..69
"D"
else
"F"
end
end
end
class LinearSearch
NORESULT = "No Results Found"
attr_accessor :data, :query, :field
def initialize(data, field, query)
@data = data
@field = field
@query = query
end
def search
all_positions = []
data.each_with_index do |info,index|
if info[field] == query
all_positions << index
end
end
all_positions.empty? ? NORESULT : all_positions
end
end
class BinarySearch
NORESULT = "No Results Found"
attr_accessor :data, :query, :field
def initialize(data, field, query)
@data = data
@field = field
@query = query
end
def search(data_info = data)
if data_info.empty?
NORESULT
else
mid = data_info.count/2 - 1
return data_info.first.values if data_info.first[field] == query
if data_info.at(mid).ssn < query
data_info.slice!(1..mid)
search(data_info)
elsif data_info.at(mid).ssn > query
data_info.slice!(mid..-1)
search(data_info)
end
end
end
end
class Sort
attr_accessor :data, :field
def initialize(data, field)
@data = data
@field = field
end
def sort_it
data.sort_by{|x| x[field] }
end
end
students = [Struct::Student.new([100,100,100,0,100],"Alex", "Trebek", "111-11-111")]
4.times do
students << Struct::Student.new([100,100,100,0,100],"Bob", "Ee", "100-12-121")
end
students << Struct::Student.new([100,100,100,0,100],"Alex", "Smith", "123-12-142")
p students[0].first_name == "Alex"
p students[0].scores.length == 5
p students[0].scores[0] == students[0].scores[4]
p students[0].scores[3] == 0
p AverageScores.new(students[0].scores).basic_average == 80
p AverageScores.new(students[0].scores).letter_grade == 'B'
p LinearSearch.new(students, "first_name", "Alex").search == [0,5]
p LinearSearch.new(students, "first_name", "NOT A STUDENT").search== "No Results Found"
Sort.new(students, "ssn").sort_it
p students[0].ssn > students[1].ssn
p students[5].ssn > students[0].ssn
p BinarySearch.new(students, "ssn", "111-11-111").search
p BinarySearch.new(students, "ssn", "111-11-111").search == [[100, 100, 100, 0, 100], "Alex", "Trebek", "111-11-111"]
p BinarySearch.new(students, "ssn", "000-00-0000").search
p BinarySearch.new(students, "ssn", "000-00-0000").search == "No Results Found"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment