Skip to content

Instantly share code, notes, and snippets.

@betaveros
Last active August 10, 2019 14:05
Show Gist options
  • Save betaveros/1aac6f2e9656276db314616057eedc93 to your computer and use it in GitHub Desktop.
Save betaveros/1aac6f2e9656276db314616057eedc93 to your computer and use it in GitHub Desktop.
Add comparable solve times to the MUMS Puzzlehunt leaderboard
(() => {window.setInterval(() => {
document.querySelectorAll('.betaveros').forEach((node) => {
node.parentNode.removeChild(node);
});
const makeNode = (t) => {
const span = document.createElement('span');
span.className = 'betaveros';
span.textContent = t;
return span;
};
const parseHMS = (s) => {
let acc = 0;
s.split(/\s+/).forEach(w => {acc = 60 * acc + parseInt(w);});
return acc;
};
const pad2 = (n) => (n < 10 ? "0" : "") + n;
const asHMS = (t) => {
const d = Math.floor(t / 60 / 60 / 24);
const h = pad2(Math.floor(t / 60 / 60) % 24);
const m = pad2(Math.floor(t / 60) % 60);
const s = pad2(t % 60);
return `${d}d ${h}h ${m}m ${s}s`;
};
let lastRelease = new Date();
lastRelease.setUTCHours(lastRelease.getUTCHours() - ((lastRelease.getUTCHours() + 22) % 24));
lastRelease.setUTCMinutes(0);
lastRelease.setUTCSeconds(0);
const releasedPuzzles = 5 * Math.min(5, lastRelease.getUTCDate() - 6);
const currentCost = Math.floor((Date.now() - lastRelease.getTime()) / 1000);
const table = document.querySelector('table');
table.parentNode.insertBefore(makeNode(`In brackets: best possible total solve time (assuming ${releasedPuzzles} released puzzles, current solves incur ${asHMS(currentCost)}; you will need to add extra days for old unlocked puzzles yourself)`), table);
document.querySelectorAll('tr').forEach((tr) => {
try {
const tds = tr.getElementsByTagName('td');
const points = +tds[3].textContent;
const solved = +tds[4].textContent;
const average = parseHMS(tds[5].textContent);
const solvedTotal = solved * average;
const unsolvedTotal = (releasedPuzzles - solved) * currentCost;
const total = solvedTotal + unsolvedTotal;
if (!isNaN(total)) {
tds[5].appendChild(makeNode(` [${asHMS(total)}]`));
}
} catch (e) {console.error(e);}
});
}, 1000);})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment