bridge-scorer
v2.4.0
Published
collection of duplicate bridge scoring algorithms.
Downloads
37
Maintainers
Readme
bridge-scorer
A collection of duplicate bridge scoring algorithms.
The change log is automatically produced with the help of semantic release.
Features
- scores a contract
- scores a pairs session with
- match points (international or North American), rank and percentage
- IMPS (Bulter or Cross-IMPS)
- ranking of competitors
Getting started
bridge-scorer is available for both Node.js and the browser. Most modern browsers are supported. If you want to know if your browser is compatible, run the online test suite.
Install with npm
> npm install bridge-scorer --save
Node
Include the package
var scorer = require('bridge-scorer')
Browser
Include the package from your project
<script src="./node_modules/bridge-scorer/dist/bridge-scorer.min.js" type="text/javascript"></script>
Or better yet, from the unpkg CDN
<script src="https://unpkg.com/bridge-scorer/dist/bridge-scorer"></script>
This will provide scorer
as a global object, or define
it if you are using AMD.
scorer.contractMade(contract, vulnerable, made)
Determines the declarors's score based upon the contract, vulernerability and made tricks.
contract is the declaror's contract
- level is the number of tricks when added to the book of six tricks will be taken (1-7).
- denomination is the trump suit or notrumps ('S', 'H', 'D', 'C' or 'NT').
- risk is '', 'X' or 'XX'.
vulnerable is the declaror's vulernerability (true or false).
made is the number of tricks made over the book contract (6) or a negative number indicating the number of tricks down on the contract.
Example
// 3NT vulnerable making 5 (11 tricks) is 660
var contract = {
level: 3,
denomination: 'NT',
risk: ''
};
var score = scorer.contractMade(contract, true, 5);
scorer.contractTricks(contract, vulnerable, tricks)
Determines the declarors's score based upon the contract, vulernerability and absolute tricks.
contract is the declaror's contract
- level is the number of tricks when added to the book of six tricks will be taken (1-7).
- denomination is the trump suit or notrumps ('S', 'H', 'D', 'C' or 'NT').
- risk is '', 'X' or 'XX'.
vulnerable is the declaror's vulernerability (true or false).
tricks is the number of tricks achieved by the declaror
Example
// 3NT vulnerable with 11 tricks is 660
var contract = {
level: 3,
denomination: 'NT',
risk: ''
};
var score = scorer.contractTricks(contract, true, 11);
scorer.contractResult(contract, vulnerable, tricks)
Determines the declarors's score based upon the contract, vulernerability and relative tricks to the contract level.
contract is the declaror's contract
- level is the number of tricks when added to the book of six tricks will be taken (1-7).
- denomination is the trump suit or notrumps ('S', 'H', 'D', 'C' or 'NT').
- risk is '', 'X' or 'XX'.
vulnerable is the declaror's vulernerability (true or false).
tricks is the number of over/under tricks
Example
// 3NT vulnerable +2 (11 tricks) is 660
var contract = {
level: 3,
denomination: 'NT',
risk: ''
};
var score = scorer.contractMade(contract, true, 2);
scorer.rank(competitors)
Assigns the rank to each competitor; see Standard competition ranking ("1224" ranking).
competitors is an array of competitors
- score is a score for the competitor
Each competitor is assigned the rank
property, ties are indicated with an 'x=' and the scale
property, a number between 0 and 1.
Example
var results = [
{ score: 10 },
{ score: 20 },
{ score: 20 },
{ score: 40 }
];
scorer.rank(results);
console.log(results)
produces
[ { score: 10, rank: '4', scale: 0 },
{ score: 20, rank: '2=', scale: 0.5 },
{ score: 20, rank: '2=', scale: 0.5 },
{ score: 40, rank: '1', scale: 1 } ]
scorer.matchpoints(games)
Determines the match points for each pair (NS and EW) based on the played games of a single board. This is the international standard measurement of achievement in a pairs competition; wins score 2 points and ties 1 point.
games is an array of games for a board
- contract.declaror is the seat that played the game ('N', 'S', 'E' or 'W')
- score is the contract score for the game
A passed in game is indicated with with a score
of 0
; the contract
is not required.
Each game is assigned the matchpointsNS
and matchpointsEW
properties.
- value is the match point value
- rank is the order in the competition, see Standard competition ranking ("1224" ranking). Ties are indicated with an 'x='.
- percentage is the percentage (0-100) of the maximum number of match points that can be won
Example
var games = [
{ contract: { declaror: 'N' }, score: 90 },
{ score: 0 } // passed in,
{ contract: { declaror: 'N' }, score: -50 },
{ contract: { declaror: 'N' }, score: -50 },
];
console.log(scorer.matchpoints(games));
produces
[ { contract: { declaror: 'N' },
score: 90,
matchpointsNS: { value: 6, rank: '1', percentage: 100 },
matchpointsEW: { value: 0, percentage: 0, rank: '4' } },
{ score: 0,
matchpointsNS: { value: 4, rank: '2', percentage: 66.66666666666666 },
matchpointsEW: { value: 2, percentage: 33.33333333333333, rank: '3' } },
{ contract: { declaror: 'N' },
score: -50,
matchpointsNS: { value: 1, rank: '3=', percentage: 16.666666666666664 },
matchpointsEW: { value: 5, percentage: 83.33333333333334, rank: '1=' } },
{ contract: { declaror: 'N' },
score: -50,
matchpointsNS: { value: 1, rank: '3=', percentage: 16.666666666666664 },
matchpointsEW: { value: 5, percentage: 83.33333333333334, rank: '1=' } } ]
scorer.matchpointsACBL(games)
The North American version of scoring match points. Same as scorer.matchpoints but different values are assigned to wins (1) and ties (0.5).
scorer.crossImps(games)
Determines the international match points for each pair (NS and EW) based on the played games of a single board. Each opponent's score is subtracted from your score and converted to IMPS. The IMPS are then summed and divided by the number of opponents.
games is an array of games for a board
- contract.declaror is the seat that played the game ('N', 'S', 'E' or 'W')
- score is the contract score for the game
A passed in game is indicated with with a score
of 0
; the contract
is not required.
Each game is assigned the impsNS
and impsEW
properties.
- value is the international match point value
Example
var games = [
{ contract: { declaror: 'S' }, score: 620 },
{ contract: { declaror: 'S' }, score: 170 },
{ contract: { declaror: 'S' }, score: 140 },
{ contract: { declaror: 'S' }, score: 140 },
{ contract: { declaror: 'S' }, score: -100 }
];
console.log(scorer.crossImps(games));
produces
[ { contract: { declaror: 'S' },
score: 620,
impsNS: { value: 10.5 },
impsEW: { value: -10.5 } },
{ contract: { declaror: 'S' },
score: 170,
impsNS: { value: -0.25 },
impsEW: { value: 0.25 } },
{ contract: { declaror: 'S' },
score: 140,
impsNS: { value: -1.25 },
impsEW: { value: 1.25 } },
{ contract: { declaror: 'S' },
score: 140,
impsNS: { value: -1.25 },
impsEW: { value: 1.25 } },
{ contract: { declaror: 'S' },
score: -100,
impsNS: { value: -7.75 },
impsEW: { value: 7.75 } } ]
scorer.butler(games)
Butler scoring is a way of scoring a pair in a way which is closer to teams scoring. On a board, a datum is calculated from all the results, and your score is the IMP score for your result compared to the datum.
games is an array of games for a board
- contract.declaror is the seat that played the game ('N', 'S', 'E' or 'W')
- score is the contract score for the game
A passed in game is indicated with with a score
of 0
; the contract
is not required.
Each game is assigned the impsNS
and impsEW
properties.
- value is the international match point value
Example
var games = [
{ contract: { declaror: 'W' }, score: 650 },
{ contract: { declaror: 'W' }, score: 170 },
{ contract: { declaror: 'W' }, score: 1440 },
{ contract: { declaror: 'E' }, score: -100 },
{ contract: { declaror: 'E' }, score: 170 },
{ contract: { declaror: 'E' }, score: 200 }
];
var datumNS = scorer.butler(games);
console.log("datum NS " + datumNS);
console.log(games)
produces
datum NS -300
[ { contract: { declaror: 'W' },
score: 650,
impsNS: { value: -8 },
impsEW: { value: 8 } },
{ contract: { declaror: 'W' },
score: 170,
impsNS: { value: 4 },
impsEW: { value: -4 } },
{ contract: { declaror: 'W' },
score: 1440,
impsNS: { value: -15 },
impsEW: { value: 15 } },
{ contract: { declaror: 'E' },
score: -100,
impsNS: { value: 9 },
impsEW: { value: -9 } },
{ contract: { declaror: 'E' },
score: 170,
impsNS: { value: 4 },
impsEW: { value: -4 } },
{ contract: { declaror: 'E' },
score: 200,
impsNS: { value: 3 },
impsEW: { value: -3 } } ]