UNPKG

grading

Version:

Grading of student submissions, in particular programming tests.

49 lines 1.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.compareNumberAware = void 0; function isNumber(str) { return str >= '0' && str <= '9'; } /** * Compare two strings which may contain numbers. The numbers are compared numerically, i.e. 01 an 1 is considered equal. * If two strings are equal, the shorter one is considered smaller. */ function compareNumberAware(a, b) { let ia = 0, ib = 0; for (; ia < a.length && ib < b.length; ia++, ib++) { const aChar = a.charAt(ia); const bChar = b.charAt(ib); if (aChar == bChar) { continue; } if (isNumber(aChar) && isNumber(bChar)) { let endA = ia + 1; let endB = ib + 1; while (endA < a.length && isNumber(a.charAt(endA))) { endA++; } while (endB < b.length && isNumber(b.charAt(endB))) { endB++; } let aNum = parseInt(a.substring(ia, endA)); let bNum = parseInt(b.substring(ib, endB)); if (aNum != bNum) { return aNum - bNum; } ia = endA - 1; ib = endB - 1; } else { return aChar.localeCompare(bChar); } } if (ia < a.length) { return 1; } else if (ib < b.length) { return -1; } return a.length - b.length; } exports.compareNumberAware = compareNumberAware; //# sourceMappingURL=compareNumberAware.js.map