npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

bridge-scorer

v2.4.0

Published

collection of duplicate bridge scoring algorithms.

Downloads

37

Readme

bridge-scorer

Greenkeeper badge Travis build status Coverage Status npm version

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 } } ]