tc-problem-linker

Topcoder Marathon 新プラットフォームの問題へのリンクを生成する雑スクリプト

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         tc-problem-linker
// @namespace    https://github.com/komori3/
// @supportURL   https://twitter.com/komori3_/
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Topcoder Marathon 新プラットフォームの問題へのリンクを生成する雑スクリプト
// @author       komori3
// @match        https://competitiveprogramming.info/topcoder/marathon
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    let new_problems =
        [
        {title: 'Marathon Match 110', round_id: 30089008, problem_name: 'ImageFromBlocks'},
        {title: 'TCO19 Marathon Round 1', round_id: 30092483, old_round_id: 17579, problem_name: 'LineUp'},
        {title: 'Marathon Match 111', round_id: 30100149, old_round_id: 17674, problem_name: 'PolyominoCovering'},
        {title: 'TCO19 Marathon Round 2', round_id: 30101930, old_round_id: 17698, problem_name: 'ContestOrganizer'},
        {title: 'TCO19 Marathon Round 3', round_id: 30103195, old_round_id: 17700, problem_name: 'JumpAround'},
        {title: 'TCO19 Marathon Final', round_id: 30104784, old_round_id: 17729, problem_name: 'MultiplayerChessPieces'},
        {title: 'Marathon Match 112', round_id: 30107461, old_round_id: 17748, problem_name: 'GlowingBacteria'},
        {title: 'Marathon Match 113', round_id: 30110632, old_round_id: 17778, problem_name: 'NumberCreator'},
        {title: 'Marathon Match 114', round_id: 30112653, problem_name: 'SnakeCharmer'},
        {title: 'Marathon Match 115', round_id: 30114286, problem_name: 'GraphReconstruction'},
        {title: 'Marathon Match 116', round_id: 30119681, problem_name: 'Lossy2dCompression'},
        {title: 'Marathon Match 117', round_id: 30122730, problem_name: 'RotatingNumbers'},
        ]

    function insertNewPlatformRows($tbody, line) {
        let line_id = $tbody.find('tr').length + 1
        let $a = (
            line.old_round_id == undefined ?
            line.title :
            '<a href="https://competitiveprogramming.info/topcoder/marathon/round/'
            + line.old_round_id
            + '">'
            + line.title
            + '</a>')
        let tr =
            '<tr role="row"><td>'
            + line_id
            + '</td><td></td><td>' + $a + '</td><td><a target="_blank" href="https://www.topcoder.com/challenges/'
            + line.round_id + '">'
            + line.problem_name
            + '</a></td></tr>'
        $tbody.prepend(tr)
    }

    function setNewPlatformURL($tr){
        // old: https://community.topcoder.com/longcontest/?module=ViewProblemStatement&rd=ROUND_ID
        // new: https://www.topcoder.com/challenges/ROUND_ID
        let $tds = $tr.find('td')
        let $td = $($tds[3])
        let $a = $($td.find('a'))
        let url_old = $a.attr('href')
        let round_id = url_old.split('&')[1].split('=')[1]
        let url_new = 'https://www.topcoder.com/challenges/' + round_id
        $a.attr('href', url_new)
    }

    function deleteObsoleteRows($tbody) {
        while($($($tbody.find('tr')[0]).find('td')[0]).text() > 460) {
            $($tbody.find('tr')[0]).remove()
        }
    }

    let $tbody = $('html').find('tbody')
    deleteObsoleteRows(($tbody));

    let $trs = $tbody.find('tr')
    for(let tr of $trs) {
        setNewPlatformURL($(tr))
    }

    for(let line of new_problems) {
        insertNewPlatformRows(($tbody), line)
    }
})();