UNPKG

@wca/helpers

Version:

Helpers and class definitions for WCA and WCIF

112 lines 3.79 kB
"use strict"; 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