bridge-scorer
Version:
collection of duplicate bridge scoring algorithms.
1 lines • 5.75 kB
JavaScript
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).scorer=e()}}(function(){return function e(r,t,i){function n(s,a){if(!t[s]){if(!r[s]){var c="function"==typeof require&&require;if(!a&&c)return c(s,!0);if(o)return o(s,!0);var f=new Error("Cannot find module '"+s+"'");throw f.code="MODULE_NOT_FOUND",f}var u=t[s]={exports:{}};r[s][0].call(u.exports,function(e){var t=r[s][1][e];return n(t||e)},u,u.exports,e,r,t,i)}return t[s].exports}for(var o="function"==typeof require&&require,s=0;s<i.length;s++)n(i[s]);return n}({1:[function(e,r,t){"use strict";var i=r.exports={};i.contractMade=e("./lib/contract").made,i.contractTricks=e("./lib/contract").tricks,i.contractResult=e("./lib/contract").result,i.matchpoints=e("./lib/matchpoints").standard,i.matchpointsACBL=e("./lib/matchpoints").ACBL,i.crossImps=e("./lib/imps").crossImps,i.butler=e("./lib/imps").butler,i.rank=e("./lib/rank")},{"./lib/contract":2,"./lib/imps":3,"./lib/matchpoints":4,"./lib/rank":5}],2:[function(e,r,t){"use strict";function i(e,r,t){if(0===e.level)return 0;var i=t-e.level,n="X"===e.risk,o="XX"===e.risk,c=e.denomination;if(t<0){if(""===e.risk)return t*(r?100:50);var f=r?a[-t]:s[-t];return o&&(f*=2),f}var u=0;switch(c){case"S":case"H":u=30*e.level;break;case"NT":u=30*e.level+10;break;case"C":case"D":u=20*e.level}if(n?u*=2:o&&(u*=4),u<100?u+=50:(u+=r?500:300,7===e.level?u+=r?1500:1e3:6===e.level&&(u+=r?750:500)),n?u+=50:o&&(u+=100),i>0)if(n)u+=i*(r?200:100);else if(o)u+=i*(r?400:200);else switch(c){case"S":case"H":case"NT":u+=30*i;break;case"C":case"D":u+=20*i}return u}function n(e,r,t){var n=e.level+6;return i(e,r,t<n?t-n:t-6)}function o(e,r,t){return n(e,r,t+e.level+6)}var s=[0,-100,-300,-500,-800,-1100,-1400,-1700,-2e3,-2300,-2600,-2900,-3200,-3500],a=[0,-200,-500,-800,-1100,-1400,-1700,-2e3,-2300,-2600,-2900,-3200,-3500,-3800];r.exports={made:i,tricks:n,result:o}},{}],3:[function(e,r,t){"use strict";function i(e){var r=a.length-1,t=1;e<0&&(t=-1,e=0-e);for(var i=0;i<r;++i)if(a[i].diff<=e&&e<a[i+1].diff)return a[i].imps*t;return 24*t}function n(e){var r,t,n,o,s,a=[];for(r=0;r<e.length;++r)if(0===(n=e[r]).score)n.impsNS={value:-1},n.impsEW={value:-1},a.push({game:n,scoreNS:0});else if(n.contract&&n.contract.declaror&&n.score){n.impsNS={value:-1},n.impsEW={value:-1};var c={game:n,scoreNS:"N"===n.contract.declaror||"S"===n.contract.declaror?n.score:-n.score};a.push(c)}for(r=0;r<a.length;++r){for(o=a[r].scoreNS,s=0,t=0;t<a.length;++t)r!==t&&(s+=i(o-a[t].scoreNS));a[r].game.impsNS.value=s/(a.length-1),a[r].game.impsEW.value=-a[r].game.impsNS.value}}function o(e,r){var t,n,o,s=[];for(t=0;t<e.length;++t)if(0===(n=e[t]).score)n.impsNS={value:-1},n.impsEW={value:-1},s.push({game:n,scoreNS:0});else if(n.contract&&n.contract.declaror&&n.score){n.impsNS={value:-1},n.impsEW={value:-1};var a={game:n,scoreNS:"N"===n.contract.declaror||"S"===n.contract.declaror?n.score:-n.score};s.push(a)}var c=r(s);for(t=0;t<s.length;++t)o=i(s[t].scoreNS-c),s[t].game.impsNS.value=o,s[t].game.impsEW.value=-o;return c}function s(e){return o(e,function(e){if(e.length>3){e.sort(function(e,r){return r.scoreNS-e.scoreNS});var r=Math.ceil((e.length-10)/15)+1;e=e.slice(r,-r)}var t=e.reduce(function(e,r){return e+r.scoreNS},0);return 10*Math.round(t/e.length/10)})}var a=[{diff:0,imps:0},{diff:20,imps:1},{diff:50,imps:2},{diff:90,imps:3},{diff:130,imps:4},{diff:170,imps:5},{diff:220,imps:6},{diff:270,imps:7},{diff:320,imps:8},{diff:370,imps:9},{diff:430,imps:10},{diff:500,imps:11},{diff:600,imps:12},{diff:750,imps:13},{diff:900,imps:14},{diff:1100,imps:15},{diff:1300,imps:16},{diff:1500,imps:17},{diff:1750,imps:18},{diff:2e3,imps:19},{diff:2250,imps:20},{diff:2500,imps:21},{diff:3e3,imps:22},{diff:3500,imps:23},{diff:4e3,imps:24}];r.exports={toImps:i,crossImps:n,butler:s}},{}],4:[function(e,r,t){"use strict";function i(e,r){var t,i,n=[];for(t=0;t<e.length;++t)if(0===(i=e[t]).score)i.matchpointsNS={value:-1},i.matchpointsEW={value:-1},n.push({game:i,scoreNS:0});else if(i.contract&&i.contract.declaror&&i.score){i.matchpointsNS={value:-1},i.matchpointsEW={value:-1};var o={game:i,scoreNS:"N"===i.contract.declaror||"S"===i.contract.declaror?i.score:-i.score};n.push(o)}var s=n.length*r.win-r.win;n.sort(function(e,r){return r.scoreNS-e.scoreNS}),t=0;for(var a,c,f,u=n.length-1;t<=u;){i=(a=n[t]).game;var l=0,p=a.scoreNS;for(c=0,f=t+1;f<=u&&p===n[f].scoreNS;++f)++c,l+=r.tie;for(l+=r.win*(u-t-c),i.matchpointsNS.value=l,i.matchpointsNS.rank=(t+1).toString(),i.matchpointsNS.percentage=l/s*100,i.matchpointsEW.value=s-l,i.matchpointsEW.percentage=i.matchpointsEW.value/s*100,c>0&&(i.matchpointsNS.rank+="="),f=0;f<c;++f)n[++t].game.matchpointsNS=i.matchpointsNS,n[t].game.matchpointsEW=i.matchpointsEW;++t}for(n.sort(function(e,r){return r.game.matchpointsEW.value-e.game.matchpointsEW.value}),t=0;t<=u;){for(i=(a=n[t]).game,c=0,f=t+1;f<=u&&i.matchpointsEW.value===n[f].game.matchpointsEW.value;++f)++c;for(i.matchpointsEW.rank=(t+1).toString(),c>0&&(i.matchpointsEW.rank+="="),f=0;f<c;++f)n[++t].game.matchpointsEW=i.matchpointsEW;++t}return e}r.exports={standard:function(e){return i(e,{win:2,tie:1})},ACBL:function(e){return i(e,{win:1,tie:.5})}}},{}],5:[function(e,r,t){"use strict";function i(e){for(var r,t,i=0,n=(e=e.slice().sort(function(e,r){return r.score-e.score})).length-1,o=0;i<=n;){var s=(t=e[i]).score,a=0;for(r=i+1;r<=n&&s===e[r].score;++r)++a;for(o=i+1,t.rank=o.toString(),a>0&&(t.rank+="="),r=0;r<a;++r)e[++i].rank=t.rank;++i}for(i=0;i<=n;++i){t=e[i];var c=parseInt(t.rank,10);t.scale=1===c?1:(o-c)/o}return e}r.exports=i},{}]},{},[1])(1)});