projects
/
rubyvote
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Cleaned up after Justin's last commit.
[rubyvote]
/
lib
/
rubyvote
/
condorcet.rb
diff --git
a/lib/rubyvote/condorcet.rb
b/lib/rubyvote/condorcet.rb
index 715399566e270db367d311c9a26d2f7c08fd1bcf..a78524b7003dd7eaa5d589c9af671a7551fde611 100644
(file)
--- a/
lib/rubyvote/condorcet.rb
+++ b/
lib/rubyvote/condorcet.rb
@@
-154,9
+154,10
@@
class CondorcetResult < ElectionResult
@matrix = voteobj.votes
end
@matrix = voteobj.votes
end
- def
list_defeat
s
+ def
victories_and_tie
s
victors = Array.new
ties = Array.new
victors = Array.new
ties = Array.new
+ victories = Hash.new
candidates = @matrix.keys.sort
candidates.each do |candidate|
candidates = @matrix.keys.sort
candidates.each do |candidate|
@@
-169,20
+170,28
@@
class CondorcetResult < ElectionResult
ties << [candidate, challenger]
end
end
ties << [candidate, challenger]
end
end
- end
+ end
- victories = victors.sort {|a,b| b[2] <=> a[2]}
+ victors.each do |list|
+ if victories.has_key?(list[0])
+ victories[list[0]][list[1]] = list[2]
+ else
+ victories[list[0]] = Hash.new
+ victories[list[0]][list[1]] = list[2]
+ end
+ end
return victories, ties
end
protected
def defeats(candidates=nil, votes=nil)
return victories, ties
end
protected
def defeats(candidates=nil, votes=nil)
- candidates = @election.candidates unless candidates
- votes = @election.votes unless votes
+ candidates ||= @election.candidates || []
+ # we're assumign that if there are candidates, there must be at
+ # least one vote for them
+ votes ||= @election.votes
defeats = Array.new
defeats = Array.new
- candidates = [candidates] unless candidates.class == Array
candidates.each do |candidate|
candidates.each do |challenger|
next if candidate == challenger
candidates.each do |candidate|
candidates.each do |challenger|
next if candidate == challenger
@@
-208,10
+217,11
@@
class PureCondorcetResult < CondorcetResult
def condorcet
votes = @election.votes
candidates = @election.candidates
def condorcet
votes = @election.votes
candidates = @election.candidates
- unless votes.length>0 and candidates.length>0
- @winners=[]
- return @winners
+
+ unless votes.length > 0 and candidates.length > 0
+ return @winners
=[]
end
end
+
victors = Hash.new
candidates.each do |candidate|
victors[candidate] = Array.new
victors = Hash.new
candidates.each do |candidate|
victors[candidate] = Array.new
@@
-241,14
+251,13
@@
class CloneproofSSDResult < CondorcetResult
def initialize(voteobj=nil)
super(voteobj)
@winners = self.cpssd()
def initialize(voteobj=nil)
super(voteobj)
@winners = self.cpssd()
- @winners.delete nil
end
protected
def cpssd
votes = @election.votes
end
protected
def cpssd
votes = @election.votes
- candidates =
*@election.candidates
+ candidates =
@election.candidates.dup
def in_schwartz_set?(candidate, candidates, transitive_defeats)
candidates.each do |challenger|
def in_schwartz_set?(candidate, candidates, transitive_defeats)
candidates.each do |challenger|
Benjamin Mako Hill
||
Want to submit a patch?