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.
yarn add largest-remainder
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)
┌─────────┬────────┬─────────────────────┬──────────┬──────────────────────┬────────────────────┬─────────────────────┬───────┬──────────────────────┬──────────────────────┐
│ (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 │
└─────────┴────────┴─────────────────────┴──────────┴──────────────────────┴────────────────────┴─────────────────────┴───────┴──────────────────────┴──────────────────────┘
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
type
the quota usedparty
the original key namevotes
the original key valuepercentage
the overall percentage of votes receiveddistribution
how the seats should be distributedremainder
the remainder used to order the results before addition of new seatsseats
the seats allocated to the partyerror
how far off thedistribution
is theseats
percentageSeats
what percentage the seats now represent
Written by Nic Mulvaney @ Normally
Inspired by https://github.com/juliuste/hare-niemeyer