1.0.3 • Published 6 years ago
largest-remainder v1.0.3
Largest Remainder
The largest remainder method (also known as Hare–Niemeyer method, Hamilton method or as Vinton's method) is one way of allocating seats proportionally for representative assemblies with voting systems.
Installation
yarn add largest-remainderUsage
const largestRemainder = require('largest-remainder')
const votes = {
Conservatives: 13636684,
Labour: 12877918,
SNP: 977568,
'Liberal Democrats': 2371861,
Green: 525665,
Other: 746144
}
const seats = 650
let government = largestRemainder(votes, seats, 'hare')
console.table(government)Results
┌─────────┬────────┬─────────────────────┬──────────┬──────────────────────┬────────────────────┬─────────────────────┬───────┬──────────────────────┬──────────────────────┐
│ (index) │ type │ party │ votes │ percentage │ distribution │ remainder │ seats │ error │ percentageSeats │
├─────────┼────────┼─────────────────────┼──────────┼──────────────────────┼────────────────────┼─────────────────────┼───────┼──────────────────────┼──────────────────────┤
│ 0 │ 'hare' │ 'Conservatives' │ 13636684 │ 0.437973859064024 │ 284.6830083916156 │ 0.6830083916155445 │ 285 │ 0.31699160838439866 │ 0.43846153846153846 │
│ 1 │ 'hare' │ 'Labour' │ 12877918 │ 0.41360432222159416 │ 268.8428094440362 │ 0.8428094440361633 │ 269 │ 0.15719055596377984 │ 0.41384615384615386 │
│ 2 │ 'hare' │ 'Liberal Democrats' │ 2371861 │ 0.07617783878642748 │ 49.51559521117786 │ 0.5155952111778532 │ 49 │ 0.5155952111778603 │ 0.07538461538461538 │
│ 3 │ 'hare' │ 'SNP' │ 977568 │ 0.031396872543024375 │ 20.407967152965842 │ 0.40796715296584196 │ 20 │ 0.40796715296584196 │ 0.03076923076923077 │
│ 4 │ 'hare' │ 'Other' │ 746144 │ 0.02396415192267175 │ 15.576698749736638 │ 0.5766987497366376 │ 16 │ 0.4233012502633624 │ 0.024615384615384615 │
│ 5 │ 'hare' │ 'Green' │ 525665 │ 0.016882955462258285 │ 10.973921050467885 │ 0.9739210504678848 │ 11 │ 0.026078949532115203 │ 0.016923076923076923 │
└─────────┴────────┴─────────────────────┴──────────┴──────────────────────┴────────────────────┴─────────────────────┴───────┴──────────────────────┴──────────────────────┘Quotas
Available quotas are hare, droop, hagenbach-bischoff and imperiali. See Quotas
Not providing a quota, rounds the seats down before ordering by the largest remainder and incrementally increasing.
droop quota defaults to hare quota when quota <= seats
Results object
typethe quota usedpartythe original key namevotesthe original key valuepercentagethe overall percentage of votes receiveddistributionhow the seats should be distributedremainderthe remainder used to order the results before addition of new seatsseatsthe seats allocated to the partyerrorhow far off thedistributionis theseatspercentageSeatswhat percentage the seats now represent
Credits
Written by Nic Mulvaney @ Normally
Inspired by https://github.com/juliuste/hare-niemeyer