Skip to content

Election script for the formal name of Python Party.

Notifications You must be signed in to change notification settings

oumpy/electiontool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 

Repository files navigation

ElectionTool

What's this ?

Python会の正式名称最終投票のために作成した、簡易選挙ツールです。

Scripts

election.py

単記移譲式反復投票を行います。

  • 毎回の投票では、自分以下の全てを足しても上の候補に及ばない候補と、それ以下の全候補が落選します。
  • 最下位が同数で落選候補を決められない場合、「当該候補以外の同率最下位を全て落選させた場合に、当選の可能性がある」候補のみが残ります。
  • それでも落選が決まらない場合は、ランダムに落選させるシミュレーションを繰り返して当選回数を表示する機能があります。 この場合、反復回数をコマンドライン引数として10進非負整数で指定します。

フルスクラッチ実装のため、特にパッケージは必要ありません。

election_schulze.py

Schulze法による当選候補決定を行います。

こちらはパッケージ python3-vote-core のインストールが必要です。 pipでインストールすることができます。

Usage

使い方は election.py, election_schulze.py どちらも同じです。

1人の投票は、候補の記号を選好順に1以上の任意個数並べたものとします。
(Schulze法で許容されている同順位は、ここでは採用していません。)
それらを並べて1人1行のテキストファイルとします。

それを標準入力にリダイレクトしてスクリプトを実行します。

$ python election.py < votes.txt

Example

入力ファイルの例 (votes.txt)

BACD
EBDACFG
BCAD
B
FBDACG
DBAC
BCAFDEG
BC
BCDAF
DBACFEG
BDACFE
DFBEACG
DABCFEG
DBFACE
DBA
DACBF
BFEDGAC
DBCA
DBA
CDABFE
BADE
BDFA

実行結果

election.py の場合

The 1-th vote: [('B', 10), ('D', 9), ('E', 1), ('F', 1), ('C', 1)]
  Candidates ['B', 'D'] survived.
The 2-th vote: [('B', 12), ('D', 10)]
---
The candidate 'B' is the Final Winner !!! 

election_schulze.py の場合

candidates: {'C', 'B', 'D', 'G', 'A', 'E', 'F'}
winner: B
pairs: {('C', 'B'): 2, ('C', 'D'): 6, ('C', 'G'): 16, ('C', 'A'): 6, ('C', 'E'): 14, ('C', 'F'): 13, ('B', 'C'): 20, ('B', 'D'): 12, ('B', 'G'): 22, ('B', 'A'): 19, ('B', 'E'): 21, ('B', 'F'): 20, ('D', 'C'): 15, ('D', 'B'): 10, ('D', 'G'): 20, ('D', 'A'): 16, ('D', 'E'): 18, ('D', 'F'): 17, ('G', 'C'): 1, ('G', 'B'): 0, ('G', 'D'): 0, ('G', 'A'): 1, ('G', 'E'): 1, ('G', 'F'): 0, ('A', 'C'): 15, ('A', 'B'): 3, ('A', 'D'): 4, ('A', 'G'): 19, ('A', 'E'): 17, ('A', 'F'): 15, ('E', 'C'): 4, ('E', 'B'): 1, ('E', 'D'): 2, ('E', 'G'): 10, ('E', 'A'): 3, ('E', 'F'): 2, ('F', 'C'): 5, ('F', 'B'): 2, ('F', 'D'): 3, ('F', 'G'): 13, ('F', 'A'): 5, ('F', 'E'): 12}
strong_pairs: {('C', 'G'): 16, ('C', 'E'): 14, ('C', 'F'): 13, ('B', 'C'): 20, ('B', 'D'): 12, ('B', 'G'): 22, ('B', 'A'): 19, ('B', 'E'): 21, ('B', 'F'): 20, ('D', 'C'): 15, ('D', 'G'): 20, ('D', 'A'): 16, ('D', 'E'): 18, ('D', 'F'): 17, ('A', 'C'): 15, ('A', 'G'): 19, ('A', 'E'): 17, ('A', 'F'): 15, ('E', 'G'): 10, ('F', 'G'): 13, ('F', 'E'): 12}
---
The candidate 'B' is the Final Winner !!!

About

Election script for the formal name of Python Party.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages