## These classes inherit from and/or are modeled after the classes in
## election.rb and condorcet.rb
+# Borda is a positional voting system and, as a result, takes a list of
+# ranked candidates and assigns points to each candidates based on their
+# order. In Borda, there are *n* candidate and the first candidates is
+# assigned *n* - 1 points and each subsequent candidate is assigned one
+# less point. The candidate is assigned no points.
+#
+# Currently, all candidates should be ranked in each ballot.
+#
+# Example::
+#
+# require 'positional'
+# vote_array = [ ["A", "B"], ["B", "A"], ["B", "A"] ]
+# resultobject = BordaVote.new(vote_array).result
class BordaVote < ElectionVote
def initialize(votes=nil)
end
super(votes)
end
-
+
def tally_vote(vote)
points = candidates.length - 1
vote.each do |candidate|
points -= 1
end
end
-
+
def verify_vote(vote=nil)
vote.instance_of?( Array ) and
vote == vote.uniq
class BordaResult < ElectionResult
attr_reader :ranked_candidates
+ attr_reader :points
def initialize(voteobj=nil)
super(voteobj)
votes = @election.votes
-
+
@ranked_candidates = votes.sort do |a, b|
b[1] <=> a[1]
end.collect {|i| i[0]}
@winners = @ranked_candidates.find_all do |i|
votes[i] == votes[@ranked_candidates[0]]
end
+
+ @points = @election.votes
end
end