Sort The Unsorted

ICPC teams may love this script!

// ==UserScript==
// @name         Sort The Unsorted
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  ICPC teams may love this script!
// @author       Parsa Alizadeh
// @match        https://codeforces.com/gym/*/standings*
// @icon         https://codeforces.org/s/0/favicon-32x32.png
// @grant        none
// @require      http://code.jquery.com/jquery-latest.js
// @license      MIT
// ==/UserScript==

function getAcceptCount() {
    let indicators = $('.standings td.bottom span.cell-accepted');
    let counts = [];
    indicators.each((i, e) => {
        if (i >= 1) counts.push(e);
    });
    return counts.map(e => parseInt(e.textContent));
}

function permute(array, perm) {
    let result = [];
    for (let i = 0; i < perm.length; i++) {
        result.push(array[perm[i]]);
    }
    return result;
}

function reversePerm(perm) {
    let rev = new Array(perm.length);
    for (let i = 0; i < perm.length; i++) {
        rev[perm[i]] = i;
    }
    return rev;
}

function idPerm(len) {
    return Array.from({length: len}, (v, i) => i);
}

function sortPerm(array) {
    return idPerm(array.length).sort((i, j) => array[i] - array[j]);
}

function collectChildren(node, fromIndex) {
    return node.find('> *').filter(i => i >= fromIndex).detach();
}

function permuteChildren(node, fromIndex, perm) {
    let children = collectChildren(node, fromIndex);
    $(permute(children, perm)).appendTo(node)
}

function permuteStanding(perm) {
    $('.standings tr').each((i, e) => {
        permuteChildren($(e), 4, perm);
    });
}

$(document).ready(function() {
    let acceptCounts = getAcceptCount();
    let sorted = sortPerm(acceptCounts).reverse();
    let unsorted = reversePerm(sorted);
    let doSort = () => {
        permuteStanding(sorted);
        $(".standings th a").css("display", "none");
    };
    let doUnsort = () => {
        permuteStanding(unsorted);
        $(".standings th a").css("display", "");
    };
    let button = $(`<div style="float: right; position: relative; bottom: 3em; font-size: 1.0rem; margin: 0 20px;">
        <form action="" method="post" class="toggle-show-unofficial" style="margin-top: 0.5em;">
            <input name="sort-the-unsort" id="sort-the-unsort" type="checkbox" checked="">
            <label for="sort-the-unsort" style="position: relative; bottom: 0.4em;">sort the unsorted</label>
        </form></div>`);
    button.insertAfter($('#pageContent div').get(1));
    let checked = true;
    $('#sort-the-unsort').change(() => {
        checked = !checked;
        if (checked) doSort();
        else doUnsort();
    });
    doSort();
});