## the CloneproofSSDVote classes but should not be used directly.
class CondorcetVote < ElectionVote
-
+
attr_accessor :results
def initialize(votes=nil)
## directly.
class CondorcetResult < ElectionResult
+ attr_reader :matrix
+
def initialize(voteobj=nil)
unless voteobj and voteobj.kind_of?( CondorcetVote )
raise ArgumentError, "You must pass a CondorcetVote array.", caller
end
super(voteobj)
+ @matrix = voteobj.votes
end
-
+
+ def list_defeats
+ victors = Array.new
+ ties = Array.new
+ candidates = @matrix.keys.sort
+
+ candidates.each do |candidate|
+ candidates.each do |challenger|
+ next if candidate == challenger
+ diff = @matrix[candidate][challenger] - @matrix[challenger][candidate]
+ if diff > 0
+ victors << [candidate, challenger, diff]
+ elsif diff == 0 && ties.include?([challenger, candidate]) == false
+ ties << [candidate, challenger]
+ end
+ end
+ end
+
+ victories = victors.sort {|a,b| b[2] <=> a[2]}
+
+ return victories, ties
+ end
+
protected
-
def defeats(candidates=nil, votes=nil)
candidates = @election.candidates unless candidates
votes = @election.votes unless votes
end
protected
-
+
def condorcet
votes = @election.votes
candidates = @election.candidates
def initialize(voteobj=nil)
super(voteobj)
@winners = self.cpssd()
+ @winners.delete nil
end
protected
def cpssd
votes = @election.votes
candidates = *@election.candidates
-
+
def in_schwartz_set?(candidate, candidates, transitive_defeats)
candidates.each do |challenger|
next if candidate == challenger