@wca/helpers
Version:
Helpers and class definitions for WCA and WCIF
112 lines • 3.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatMultiResult = exports.isMultiResultDnf = exports.encodeMultiResult = exports.decodeMultiResult = exports.isMultiResult = exports.isDns = exports.isDnf = void 0;
var time_1 = require("./time");
function isDnf(result) {
return result === -1;
}
exports.isDnf = isDnf;
function isDns(result) {
return result === -2;
}
exports.isDns = isDns;
function isMultiResult(result) {
// Formatted as a base 10 string, a multi result will always have 8 or 9 digits.
// New style mbld has an implied 0 at the beginning which is not included in the length
return [9, 10].indexOf(result.toString().length) > -1;
}
exports.isMultiResult = isMultiResult;
function decodeMultiResult(result) {
var r = result;
if (r === -1) {
return { isDnf: true };
}
if (r === -2) {
return { isDns: true };
}
return r.toString().length === 10
? decodeOldMultiResult(result)
: decodeNewMultiResult(result);
}
exports.decodeMultiResult = decodeMultiResult;
/**
* Encodes new style multiblind result
*/
function encodeMultiResult(result) {
if (isDnfMultiResult(result))
return -1;
if (isDnsMultiResult(result))
return -2;
if (isMultiResultDnf(result))
return -1;
var missed = result.attempted - result.solved;
var dd = 99 - (result.solved - missed);
var tt = Math.round((result.centiseconds || 9999900) / 100); // multi results are always rounded to seconds, 99999 is used for 'unknown'
return dd * 10000000 + tt * 100 + missed;
}
exports.encodeMultiResult = encodeMultiResult;
function isMultiResultDnf(result) {
if (isDnfMultiResult(result))
return true;
if (isDnsMultiResult(result))
return true;
if (result.solved < 2)
return true;
var solved = result.solved;
var notSolved = result.attempted - solved;
if (solved - notSolved < 0)
return true;
return false;
}
exports.isMultiResultDnf = isMultiResultDnf;
function formatMultiResult(result) {
if (isDnfMultiResult(result))
return 'DNF';
if (isDnsMultiResult(result))
return 'DNS';
if (isMultiResultDnf(result))
return 'DNF';
var formatted = "".concat(result.solved, "/").concat(result.attempted);
if (result.centiseconds && result.centiseconds !== 9999900) {
var fcs = (0, time_1.formatCentiseconds)(result.centiseconds);
formatted += " ".concat(fcs.substring(0, fcs.length - 3)); // chop off the decimal part
}
return formatted;
}
exports.formatMultiResult = formatMultiResult;
function isDnfMultiResult(result) {
return result.hasOwnProperty('isDnf');
}
function isDnsMultiResult(result) {
return result.hasOwnProperty('isDns');
}
function decodeOldMultiResult(result) {
// Handles DNF and DNS
if (result <= 0)
return { solved: 0, attempted: 0, centiseconds: result };
var seconds = result % 1e5;
var AA = Math.floor(result / 1e5) % 100;
var SS = Math.floor(result / 1e7) % 100;
var solved = 99 - SS;
var res = { solved: solved, attempted: AA };
if (seconds < 99999) {
res.centiseconds = seconds * 100;
}
return res;
}
function decodeNewMultiResult(result) {
// Handles DNF and DNS
if (result <= 0)
return { solved: 0, attempted: 0, centiseconds: result };
var missed = result % 100;
var seconds = Math.floor(result / 100) % 1e5;
var points = 99 - (Math.floor(result / 1e7) % 100);
var solved = points + missed;
var attempted = solved + missed;
var res = { solved: solved, attempted: attempted };
if (seconds < 99999) {
res.centiseconds = seconds * 100;
}
return res;
}
//# sourceMappingURL=result.js.map