projects
/
selectricity
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
729d458
)
imported new version of ruby vote
author
<mako@atdot.cc>
<>
Sat, 18 Aug 2007 00:08:06 +0000
(20:08 -0400)
committer
<mako@atdot.cc>
<>
Sat, 18 Aug 2007 00:08:06 +0000
(20:08 -0400)
lib/rubyvote/condorcet.rb
patch
|
blob
|
history
lib/rubyvote/election.rb
patch
|
blob
|
history
diff --git
a/lib/rubyvote/condorcet.rb
b/lib/rubyvote/condorcet.rb
index 7fda91b48073a0308c8040ddba03ac13d8822929..d0210efe19cfbf4fd09f9feb9dc82e4678583b74 100644
(file)
--- a/
lib/rubyvote/condorcet.rb
+++ b/
lib/rubyvote/condorcet.rb
@@
-33,8
+33,6
@@
class CondorcetVote < ElectionVote
class CondorcetVote < ElectionVote
- attr_accessor :results
-
def initialize(votes=nil)
unless defined?(@candidates)
@candidates = Array.new
def initialize(votes=nil)
unless defined?(@candidates)
@candidates = Array.new
@@
-46,7
+44,6
@@
class CondorcetVote < ElectionVote
end
end
super(votes)
end
end
super(votes)
- @results = Array.new
end
def tally_vote(vote=nil)
end
def tally_vote(vote=nil)
@@
-86,53
+83,24
@@
class CondorcetVote < ElectionVote
end
end
end
end
- def results
- if @results.size < 2 && (not @candidates.empty?)
- tabulate
- end
- @results
- end
-
- def result
- find_only_winner unless @winner
- @winner
- end
-
protected
def verify_vote(vote=nil)
vote.instance_of?( Array ) and
vote == vote.uniq
end
protected
def verify_vote(vote=nil)
vote.instance_of?( Array ) and
vote == vote.uniq
end
-
- def tabulate
- find_only_winner unless @winner
- until @candidates.empty?
- aResult = resultFactory( self )
- @results << aResult.winners
- filter_out(aResult)
- end
- end
-
- def find_only_winner
- @winner = resultFactory( self )
- @results << @winner.winners
- filter_out(@winner)
- end
-
end
class PureCondorcetVote < CondorcetVote
end
class PureCondorcetVote < CondorcetVote
- def result
Factory(init)
- PureCondorcetResult.new(
init
)
+ def result
+ PureCondorcetResult.new(
self
)
end
end
class CloneproofSSDVote < CondorcetVote
end
end
class CloneproofSSDVote < CondorcetVote
- def result
Factory(init)
- CloneproofSSDResult.new(
init
)
+ def result
+ CloneproofSSDResult.new(
self
)
end
end
-
end
end
@@
-170,8
+138,8
@@
class CondorcetResult < ElectionResult
ties << [candidate, challenger]
end
end
ties << [candidate, challenger]
end
end
- end
-
+ end
+
victors.each do |list|
if victories.has_key?(list[0])
victories[list[0]][list[1]] = list[2]
victors.each do |list|
if victories.has_key?(list[0])
victories[list[0]][list[1]] = list[2]
@@
-183,6
+151,14
@@
class CondorcetResult < ElectionResult
return victories, ties
end
return victories, ties
end
+
+ def ranked_candidates
+ if not defined?(@ranked_candidates)
+ @ranked_candidates = build_ranked_candidates()
+ end
+
+ @ranked_candidates
+ end
protected
def defeats(candidates=nil, votes=nil)
protected
def defeats(candidates=nil, votes=nil)
@@
-203,6
+179,27
@@
class CondorcetResult < ElectionResult
defeats
end
defeats
end
+
+ def build_ranked_candidates
+ # build a lis of ranked candidates by dropping the winner and
+ # cursing
+
+ ranked_candidates = []
+
+ resultobj = self.dup
+ candidates = self.election.candidates
+
+ until candidates.empty?
+ ranked_candidates << resultobj.winners
+
+ new_voteobj = resultobj.election.dup
+ candidates = new_voteobj.candidates
+ new_voteobj.candidates.delete_if {|x| resultobj.winners.include?(x)}
+ resultobj = new_voteobj.result
+ end
+
+ ranked_candidates
+ end
end
end
diff --git
a/lib/rubyvote/election.rb
b/lib/rubyvote/election.rb
index 5a5824341a57c1f4c9f6aef7ec14ed41f40dc693..3655a034e7575d7be3541ab49e1be12a80fb0c17 100644
(file)
--- a/
lib/rubyvote/election.rb
+++ b/
lib/rubyvote/election.rb
@@
-66,10
+66,6
@@
class ElectionVote
self.verify_vote(vote)
end
self.verify_vote(vote)
end
- def filter_out(winner)
- @candidates.delete_if {|x| winner.winners.include?(x)}
- end
-
end
class PluralityVote < ElectionVote
end
class PluralityVote < ElectionVote
@@
-118,6
+114,7
@@
end
class ElectionResult
attr_reader :winners
class ElectionResult
attr_reader :winners
+ attr_reader :election
def initialize(voteobj=nil)
unless voteobj and voteobj.kind_of?( ElectionVote )
def initialize(voteobj=nil)
unless voteobj and voteobj.kind_of?( ElectionVote )
@@
-135,7
+132,7
@@
class ElectionResult
def winner?
@winners.length > 0 and not @winners[0].nil?
end
def winner?
@winners.length > 0 and not @winners[0].nil?
end
-
+
end
class PluralityResult < ElectionResult
end
class PluralityResult < ElectionResult
Benjamin Mako Hill
||
Want to submit a patch?