# Vote Counter An opinionated single transferrable vote counter for the command line. ## Installation Installation can be done via cargo by running: ``` cargo install vote-counter ``` ## Demo A sample `csv` file in the appropriate format is provided at the top level of this repository. Run: ``` vote-counter sample.csv --report ``` to count the votes from that file. ## Arguments Running `vote-counter --help` will output the following: ``` USAGE: vote-counter [OPTIONS] ARGS: Path to the CSV containing the ballots OPTIONS: -h, --help Print help information --report Generate report of counting -t, --threshold Threshold to win [default: 0.5] -V, --version Print version information ``` explaining each argument and how to use it. ## Ballot File The ballot file should be a `csv` formatted as below: | Peter | Mia | Hannah | Lee | Fred | Julia | | ----- | --- | ------ | --- | ---- | ----- | | | 2 | 1 | | | 3 | | 1 | | 2 | 3 | 4 | | | 5 | 4 | 3 | 1 | 2 | 6 | Each row represents a ballot paper, where preferenced are expressed starting at 1, and continuing until the voter no longer has a preference. ## Validity of Votes This program is generally permissive in the votes that are considered valid. If a ballot includes any number of non-negative preference numbers, none of which are repeating, the ballot is valid. An invalid ballot occurs when the same preference is expressed twice. For example, the following are not valid: | Peter | Mia | Hannah | Lee | Fred | Julia | | ----- | --- | ------ | --- | ---- | ----- | | 1 | 1 | | 3 | | | | 0 | 1 | | 4 | | 4 | | 2 | | 2 | | 1 | | However the following are valid: | Peter | Mia | Hannah | Lee | Fred | Julia | | ----- | --- | ------ | --- | ---- | ----- | | 0 | 1 | 2 | | | 3 | | | | 1 | 4 | | | | 2 | | 5 | | | 1 | Negative numbers are simply ignored.