您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
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(); });