AtCoder Linkifier

ページ内の「A[BRG]C000-xx」といった文字列を検出してAtCoderの問題ページへのリンクに変換します。

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         AtCoder Linkifier
// @version      1.2
// @namespace    https://github.com/fe2O3-Tpa
// @match        *://*/*
// @exclude      *://atcoder.jp/*
// @grant        none
// @run-at       document-idle
// @description  ページ内の「A[BRG]C000-xx」といった文字列を検出してAtCoderの問題ページへのリンクに変換します。
// @author       Prrapp(Fe2O3-Tpa) / Gemini
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    const regex = /A[BRG]C\d{3}(?:\s*-\s*|\s*)[A-Za-z]{1,2}/g;
    const from_abc042_to_abc111_urls = {
        "ABC041-A": "https://atcoder.jp/contests/abc041/tasks/abc041_a",
        "ABC041-B": "https://atcoder.jp/contests/abc041/tasks/abc041_b",
        "ABC041-C": "https://atcoder.jp/contests/abc041/tasks/abc041_c",
        "ABC041-D": "https://atcoder.jp/contests/abc041/tasks/abc041_d",
        "ABC042-A": "https://atcoder.jp/contests/abc042/tasks/abc042_a",
        "ABC042-B": "https://atcoder.jp/contests/abc042/tasks/abc042_b",
        "ABC042-C": "https://atcoder.jp/contests/abc042/tasks/arc058_a",
        "ABC042-D": "https://atcoder.jp/contests/abc042/tasks/arc058_b",
        "ABC043-A": "https://atcoder.jp/contests/abc043/tasks/abc043_a",
        "ABC043-B": "https://atcoder.jp/contests/abc043/tasks/abc043_b",
        "ABC043-C": "https://atcoder.jp/contests/abc043/tasks/arc059_a",
        "ABC043-D": "https://atcoder.jp/contests/abc043/tasks/arc059_b",
        "ABC044-A": "https://atcoder.jp/contests/abc044/tasks/abc044_a",
        "ABC044-B": "https://atcoder.jp/contests/abc044/tasks/abc044_b",
        "ABC044-C": "https://atcoder.jp/contests/abc044/tasks/arc060_a",
        "ABC044-D": "https://atcoder.jp/contests/abc044/tasks/arc060_b",
        "ABC045-A": "https://atcoder.jp/contests/abc045/tasks/abc045_a",
        "ABC045-B": "https://atcoder.jp/contests/abc045/tasks/abc045_b",
        "ABC045-C": "https://atcoder.jp/contests/abc045/tasks/arc061_a",
        "ABC045-D": "https://atcoder.jp/contests/abc045/tasks/arc061_b",
        "ABC046-A": "https://atcoder.jp/contests/abc046/tasks/abc046_a",
        "ABC046-B": "https://atcoder.jp/contests/abc046/tasks/abc046_b",
        "ABC046-C": "https://atcoder.jp/contests/abc046/tasks/arc062_a",
        "ABC046-D": "https://atcoder.jp/contests/abc046/tasks/arc062_b",
        "ABC047-A": "https://atcoder.jp/contests/abc047/tasks/abc047_a",
        "ABC047-B": "https://atcoder.jp/contests/abc047/tasks/abc047_b",
        "ABC047-C": "https://atcoder.jp/contests/abc047/tasks/arc063_a",
        "ABC047-D": "https://atcoder.jp/contests/abc047/tasks/arc063_b",
        "ABC048-A": "https://atcoder.jp/contests/abc048/tasks/abc048_a",
        "ABC048-B": "https://atcoder.jp/contests/abc048/tasks/abc048_b",
        "ABC048-C": "https://atcoder.jp/contests/abc048/tasks/arc064_a",
        "ABC048-D": "https://atcoder.jp/contests/abc048/tasks/arc064_b",
        "ABC049-A": "https://atcoder.jp/contests/abc049/tasks/abc049_a",
        "ABC049-B": "https://atcoder.jp/contests/abc049/tasks/abc049_b",
        "ABC049-C": "https://atcoder.jp/contests/abc049/tasks/arc065_a",
        "ABC049-D": "https://atcoder.jp/contests/abc049/tasks/arc065_b",
        "ABC050-A": "https://atcoder.jp/contests/abc050/tasks/abc050_a",
        "ABC050-B": "https://atcoder.jp/contests/abc050/tasks/abc050_b",
        "ABC050-C": "https://atcoder.jp/contests/abc050/tasks/arc066_a",
        "ABC050-D": "https://atcoder.jp/contests/abc050/tasks/arc066_b",
        "ABC051-A": "https://atcoder.jp/contests/abc051/tasks/abc051_a",
        "ABC051-B": "https://atcoder.jp/contests/abc051/tasks/abc051_b",
        "ABC051-C": "https://atcoder.jp/contests/abc051/tasks/abc051_c",
        "ABC051-D": "https://atcoder.jp/contests/abc051/tasks/abc051_d",
        "ABC052-A": "https://atcoder.jp/contests/abc052/tasks/abc052_a",
        "ABC052-B": "https://atcoder.jp/contests/abc052/tasks/abc052_b",
        "ABC052-C": "https://atcoder.jp/contests/abc052/tasks/arc067_a",
        "ABC052-D": "https://atcoder.jp/contests/abc052/tasks/arc067_b",
        "ABC053-A": "https://atcoder.jp/contests/abc053/tasks/abc053_a",
        "ABC053-B": "https://atcoder.jp/contests/abc053/tasks/abc053_b",
        "ABC053-C": "https://atcoder.jp/contests/abc053/tasks/arc068_a",
        "ABC053-D": "https://atcoder.jp/contests/abc053/tasks/arc068_b",
        "ABC054-A": "https://atcoder.jp/contests/abc054/tasks/abc054_a",
        "ABC054-B": "https://atcoder.jp/contests/abc054/tasks/abc054_b",
        "ABC054-C": "https://atcoder.jp/contests/abc054/tasks/abc054_c",
        "ABC054-D": "https://atcoder.jp/contests/abc054/tasks/abc054_d",
        "ABC055-A": "https://atcoder.jp/contests/abc055/tasks/abc055_a",
        "ABC055-B": "https://atcoder.jp/contests/abc055/tasks/abc055_b",
        "ABC055-C": "https://atcoder.jp/contests/abc055/tasks/arc069_a",
        "ABC055-D": "https://atcoder.jp/contests/abc055/tasks/arc069_b",
        "ABC056-A": "https://atcoder.jp/contests/abc056/tasks/abc056_a",
        "ABC056-B": "https://atcoder.jp/contests/abc056/tasks/abc056_b",
        "ABC056-C": "https://atcoder.jp/contests/abc056/tasks/arc070_a",
        "ABC056-D": "https://atcoder.jp/contests/abc056/tasks/arc070_b",
        "ABC057-A": "https://atcoder.jp/contests/abc057/tasks/abc057_a",
        "ABC057-B": "https://atcoder.jp/contests/abc057/tasks/abc057_b",
        "ABC057-C": "https://atcoder.jp/contests/abc057/tasks/abc057_c",
        "ABC057-D": "https://atcoder.jp/contests/abc057/tasks/abc057_d",
        "ABC058-A": "https://atcoder.jp/contests/abc058/tasks/abc058_a",
        "ABC058-B": "https://atcoder.jp/contests/abc058/tasks/abc058_b",
        "ABC058-C": "https://atcoder.jp/contests/abc058/tasks/arc071_a",
        "ABC058-D": "https://atcoder.jp/contests/abc058/tasks/arc071_b",
        "ABC059-A": "https://atcoder.jp/contests/abc059/tasks/abc059_a",
        "ABC059-B": "https://atcoder.jp/contests/abc059/tasks/abc059_b",
        "ABC059-C": "https://atcoder.jp/contests/abc059/tasks/arc072_a",
        "ABC059-D": "https://atcoder.jp/contests/abc059/tasks/arc072_b",
        "ABC060-A": "https://atcoder.jp/contests/abc060/tasks/abc060_a",
        "ABC060-B": "https://atcoder.jp/contests/abc060/tasks/abc060_b",
        "ABC060-C": "https://atcoder.jp/contests/abc060/tasks/arc073_a",
        "ABC060-D": "https://atcoder.jp/contests/abc060/tasks/arc073_b",
        "ABC061-A": "https://atcoder.jp/contests/abc061/tasks/abc061_a",
        "ABC061-B": "https://atcoder.jp/contests/abc061/tasks/abc061_b",
        "ABC061-C": "https://atcoder.jp/contests/abc061/tasks/abc061_c",
        "ABC061-D": "https://atcoder.jp/contests/abc061/tasks/abc061_d",
        "ABC062-A": "https://atcoder.jp/contests/abc062/tasks/abc062_a",
        "ABC062-B": "https://atcoder.jp/contests/abc062/tasks/abc062_b",
        "ABC062-C": "https://atcoder.jp/contests/abc062/tasks/arc074_a",
        "ABC062-D": "https://atcoder.jp/contests/abc062/tasks/arc074_b",
        "ABC063-A": "https://atcoder.jp/contests/abc063/tasks/abc063_a",
        "ABC063-B": "https://atcoder.jp/contests/abc063/tasks/abc063_b",
        "ABC063-C": "https://atcoder.jp/contests/abc063/tasks/arc075_a",
        "ABC063-D": "https://atcoder.jp/contests/abc063/tasks/arc075_b",
        "ABC064-A": "https://atcoder.jp/contests/abc064/tasks/abc064_a",
        "ABC064-B": "https://atcoder.jp/contests/abc064/tasks/abc064_b",
        "ABC064-C": "https://atcoder.jp/contests/abc064/tasks/abc064_c",
        "ABC064-D": "https://atcoder.jp/contests/abc064/tasks/abc064_d",
        "ABC065-A": "https://atcoder.jp/contests/abc065/tasks/abc065_a",
        "ABC065-B": "https://atcoder.jp/contests/abc065/tasks/abc065_b",
        "ABC065-C": "https://atcoder.jp/contests/abc065/tasks/arc076_a",
        "ABC065-D": "https://atcoder.jp/contests/abc065/tasks/arc076_b",
        "ABC066-A": "https://atcoder.jp/contests/abc066/tasks/abc066_a",
        "ABC066-B": "https://atcoder.jp/contests/abc066/tasks/abc066_b",
        "ABC066-C": "https://atcoder.jp/contests/abc066/tasks/arc077_a",
        "ABC066-D": "https://atcoder.jp/contests/abc066/tasks/arc077_b",
        "ABC067-A": "https://atcoder.jp/contests/abc067/tasks/abc067_a",
        "ABC067-B": "https://atcoder.jp/contests/abc067/tasks/abc067_b",
        "ABC067-C": "https://atcoder.jp/contests/abc067/tasks/arc078_a",
        "ABC067-D": "https://atcoder.jp/contests/abc067/tasks/arc078_b",
        "ABC068-A": "https://atcoder.jp/contests/abc068/tasks/abc068_a",
        "ABC068-B": "https://atcoder.jp/contests/abc068/tasks/abc068_b",
        "ABC068-C": "https://atcoder.jp/contests/abc068/tasks/arc079_a",
        "ABC068-D": "https://atcoder.jp/contests/abc068/tasks/arc079_b",
        "ABC069-A": "https://atcoder.jp/contests/abc069/tasks/abc069_a",
        "ABC069-B": "https://atcoder.jp/contests/abc069/tasks/abc069_b",
        "ABC069-C": "https://atcoder.jp/contests/abc069/tasks/arc080_a",
        "ABC069-D": "https://atcoder.jp/contests/abc069/tasks/arc080_b",
        "ABC070-A": "https://atcoder.jp/contests/abc070/tasks/abc070_a",
        "ABC070-B": "https://atcoder.jp/contests/abc070/tasks/abc070_b",
        "ABC070-C": "https://atcoder.jp/contests/abc070/tasks/abc070_c",
        "ABC070-D": "https://atcoder.jp/contests/abc070/tasks/abc070_d",
        "ABC071-A": "https://atcoder.jp/contests/abc071/tasks/abc071_a",
        "ABC071-B": "https://atcoder.jp/contests/abc071/tasks/abc071_b",
        "ABC071-C": "https://atcoder.jp/contests/abc071/tasks/arc081_a",
        "ABC071-D": "https://atcoder.jp/contests/abc071/tasks/arc081_b",
        "ABC072-A": "https://atcoder.jp/contests/abc072/tasks/abc072_a",
        "ABC072-B": "https://atcoder.jp/contests/abc072/tasks/abc072_b",
        "ABC072-C": "https://atcoder.jp/contests/abc072/tasks/arc082_a",
        "ABC072-D": "https://atcoder.jp/contests/abc072/tasks/arc082_b",
        "ABC073-A": "https://atcoder.jp/contests/abc073/tasks/abc073_a",
        "ABC073-B": "https://atcoder.jp/contests/abc073/tasks/abc073_b",
        "ABC073-C": "https://atcoder.jp/contests/abc073/tasks/abc073_c",
        "ABC073-D": "https://atcoder.jp/contests/abc073/tasks/abc073_d",
        "ABC074-A": "https://atcoder.jp/contests/abc074/tasks/abc074_a",
        "ABC074-B": "https://atcoder.jp/contests/abc074/tasks/abc074_b",
        "ABC074-C": "https://atcoder.jp/contests/abc074/tasks/arc083_a",
        "ABC074-D": "https://atcoder.jp/contests/abc074/tasks/arc083_b",
        "ABC075-A": "https://atcoder.jp/contests/abc075/tasks/abc075_a",
        "ABC075-B": "https://atcoder.jp/contests/abc075/tasks/abc075_b",
        "ABC075-C": "https://atcoder.jp/contests/abc075/tasks/abc075_c",
        "ABC075-D": "https://atcoder.jp/contests/abc075/tasks/abc075_d",
        "ABC076-A": "https://atcoder.jp/contests/abc076/tasks/abc076_a",
        "ABC076-B": "https://atcoder.jp/contests/abc076/tasks/abc076_b",
        "ABC076-C": "https://atcoder.jp/contests/abc076/tasks/abc076_c",
        "ABC076-D": "https://atcoder.jp/contests/abc076/tasks/abc076_d",
        "ABC077-A": "https://atcoder.jp/contests/abc077/tasks/abc077_a",
        "ABC077-B": "https://atcoder.jp/contests/abc077/tasks/abc077_b",
        "ABC077-C": "https://atcoder.jp/contests/abc077/tasks/arc084_a",
        "ABC077-D": "https://atcoder.jp/contests/abc077/tasks/arc084_b",
        "ABC078-A": "https://atcoder.jp/contests/abc078/tasks/abc078_a",
        "ABC078-B": "https://atcoder.jp/contests/abc078/tasks/abc078_b",
        "ABC078-C": "https://atcoder.jp/contests/abc078/tasks/arc085_a",
        "ABC078-D": "https://atcoder.jp/contests/abc078/tasks/arc085_b",
        "ABC079-A": "https://atcoder.jp/contests/abc079/tasks/abc079_a",
        "ABC079-B": "https://atcoder.jp/contests/abc079/tasks/abc079_b",
        "ABC079-C": "https://atcoder.jp/contests/abc079/tasks/abc079_c",
        "ABC079-D": "https://atcoder.jp/contests/abc079/tasks/abc079_d",
        "ABC080-A": "https://atcoder.jp/contests/abc080/tasks/abc080_a",
        "ABC080-B": "https://atcoder.jp/contests/abc080/tasks/abc080_b",
        "ABC080-C": "https://atcoder.jp/contests/abc080/tasks/abc080_c",
        "ABC080-D": "https://atcoder.jp/contests/abc080/tasks/abc080_d",
        "ABC081-A": "https://atcoder.jp/contests/abc081/tasks/abc081_a",
        "ABC081-B": "https://atcoder.jp/contests/abc081/tasks/abc081_b",
        "ABC081-C": "https://atcoder.jp/contests/abc081/tasks/arc086_a",
        "ABC081-D": "https://atcoder.jp/contests/abc081/tasks/arc086_b",
        "ABC082-A": "https://atcoder.jp/contests/abc082/tasks/abc082_a",
        "ABC082-B": "https://atcoder.jp/contests/abc082/tasks/abc082_b",
        "ABC082-C": "https://atcoder.jp/contests/abc082/tasks/arc087_a",
        "ABC082-D": "https://atcoder.jp/contests/abc082/tasks/arc087_b",
        "ABC083-A": "https://atcoder.jp/contests/abc083/tasks/abc083_a",
        "ABC083-B": "https://atcoder.jp/contests/abc083/tasks/abc083_b",
        "ABC083-C": "https://atcoder.jp/contests/abc083/tasks/arc088_a",
        "ABC083-D": "https://atcoder.jp/contests/abc083/tasks/arc088_b",
        "ABC084-A": "https://atcoder.jp/contests/abc084/tasks/abc084_a",
        "ABC084-B": "https://atcoder.jp/contests/abc084/tasks/abc084_b",
        "ABC084-C": "https://atcoder.jp/contests/abc084/tasks/abc084_c",
        "ABC084-D": "https://atcoder.jp/contests/abc084/tasks/abc084_d",
        "ABC085-A": "https://atcoder.jp/contests/abc085/tasks/abc085_a",
        "ABC085-B": "https://atcoder.jp/contests/abc085/tasks/abc085_b",
        "ABC085-C": "https://atcoder.jp/contests/abc085/tasks/abc085_c",
        "ABC085-D": "https://atcoder.jp/contests/abc085/tasks/abc085_d",
        "ABC086-A": "https://atcoder.jp/contests/abc086/tasks/abc086_a",
        "ABC086-B": "https://atcoder.jp/contests/abc086/tasks/abc086_b",
        "ABC086-C": "https://atcoder.jp/contests/abc086/tasks/arc089_a",
        "ABC086-D": "https://atcoder.jp/contests/abc086/tasks/arc089_b",
        "ABC087-A": "https://atcoder.jp/contests/abc087/tasks/abc087_a",
        "ABC087-B": "https://atcoder.jp/contests/abc087/tasks/abc087_b",
        "ABC087-C": "https://atcoder.jp/contests/abc087/tasks/arc090_a",
        "ABC087-D": "https://atcoder.jp/contests/abc087/tasks/arc090_b",
        "ABC088-A": "https://atcoder.jp/contests/abc088/tasks/abc088_a",
        "ABC088-B": "https://atcoder.jp/contests/abc088/tasks/abc088_b",
        "ABC088-C": "https://atcoder.jp/contests/abc088/tasks/abc088_c",
        "ABC088-D": "https://atcoder.jp/contests/abc088/tasks/abc088_d",
        "ABC089-A": "https://atcoder.jp/contests/abc089/tasks/abc089_a",
        "ABC089-B": "https://atcoder.jp/contests/abc089/tasks/abc089_b",
        "ABC089-C": "https://atcoder.jp/contests/abc089/tasks/abc089_c",
        "ABC089-D": "https://atcoder.jp/contests/abc089/tasks/abc089_d",
        "ABC090-A": "https://atcoder.jp/contests/abc090/tasks/abc090_a",
        "ABC090-B": "https://atcoder.jp/contests/abc090/tasks/abc090_b",
        "ABC090-C": "https://atcoder.jp/contests/abc090/tasks/arc091_a",
        "ABC090-D": "https://atcoder.jp/contests/abc090/tasks/arc091_b",
        "ABC091-A": "https://atcoder.jp/contests/abc091/tasks/abc091_a",
        "ABC091-B": "https://atcoder.jp/contests/abc091/tasks/abc091_b",
        "ABC091-C": "https://atcoder.jp/contests/abc091/tasks/arc092_a",
        "ABC091-D": "https://atcoder.jp/contests/abc091/tasks/arc092_b",
        "ABC092-A": "https://atcoder.jp/contests/abc092/tasks/abc092_a",
        "ABC092-B": "https://atcoder.jp/contests/abc092/tasks/abc092_b",
        "ABC092-C": "https://atcoder.jp/contests/abc092/tasks/arc093_a",
        "ABC092-D": "https://atcoder.jp/contests/abc092/tasks/arc093_b",
        "ABC093-A": "https://atcoder.jp/contests/abc093/tasks/abc093_a",
        "ABC093-B": "https://atcoder.jp/contests/abc093/tasks/abc093_b",
        "ABC093-C": "https://atcoder.jp/contests/abc093/tasks/arc094_a",
        "ABC093-D": "https://atcoder.jp/contests/abc093/tasks/arc094_b",
        "ABC094-A": "https://atcoder.jp/contests/abc094/tasks/abc094_a",
        "ABC094-B": "https://atcoder.jp/contests/abc094/tasks/abc094_b",
        "ABC094-C": "https://atcoder.jp/contests/abc094/tasks/arc095_a",
        "ABC094-D": "https://atcoder.jp/contests/abc094/tasks/arc095_b",
        "ABC095-A": "https://atcoder.jp/contests/abc095/tasks/abc095_a",
        "ABC095-B": "https://atcoder.jp/contests/abc095/tasks/abc095_b",
        "ABC095-C": "https://atcoder.jp/contests/abc095/tasks/arc096_a",
        "ABC095-D": "https://atcoder.jp/contests/abc095/tasks/arc096_b",
        "ABC096-A": "https://atcoder.jp/contests/abc096/tasks/abc096_a",
        "ABC096-B": "https://atcoder.jp/contests/abc096/tasks/abc096_b",
        "ABC096-C": "https://atcoder.jp/contests/abc096/tasks/abc096_c",
        "ABC096-D": "https://atcoder.jp/contests/abc096/tasks/abc096_d",
        "ABC097-A": "https://atcoder.jp/contests/abc097/tasks/abc097_a",
        "ABC097-B": "https://atcoder.jp/contests/abc097/tasks/abc097_b",
        "ABC097-C": "https://atcoder.jp/contests/abc097/tasks/arc097_a",
        "ABC097-D": "https://atcoder.jp/contests/abc097/tasks/arc097_b",
        "ABC098-A": "https://atcoder.jp/contests/abc098/tasks/abc098_a",
        "ABC098-B": "https://atcoder.jp/contests/abc098/tasks/abc098_b",
        "ABC098-C": "https://atcoder.jp/contests/abc098/tasks/arc098_a",
        "ABC098-D": "https://atcoder.jp/contests/abc098/tasks/arc098_b",
        "ABC099-A": "https://atcoder.jp/contests/abc099/tasks/abc099_a",
        "ABC099-B": "https://atcoder.jp/contests/abc099/tasks/abc099_b",
        "ABC099-C": "https://atcoder.jp/contests/abc099/tasks/abc099_c",
        "ABC099-D": "https://atcoder.jp/contests/abc099/tasks/abc099_d",
        "ABC100-A": "https://atcoder.jp/contests/abc100/tasks/abc100_a",
        "ABC100-B": "https://atcoder.jp/contests/abc100/tasks/abc100_b",
        "ABC100-C": "https://atcoder.jp/contests/abc100/tasks/abc100_c",
        "ABC100-D": "https://atcoder.jp/contests/abc100/tasks/abc100_d",
        "ABC101-A": "https://atcoder.jp/contests/abc101/tasks/abc101_a",
        "ABC101-B": "https://atcoder.jp/contests/abc101/tasks/abc101_b",
        "ABC101-C": "https://atcoder.jp/contests/abc101/tasks/arc099_a",
        "ABC101-D": "https://atcoder.jp/contests/abc101/tasks/arc099_b",
        "ABC102-A": "https://atcoder.jp/contests/abc102/tasks/abc102_a",
        "ABC102-B": "https://atcoder.jp/contests/abc102/tasks/abc102_b",
        "ABC102-C": "https://atcoder.jp/contests/abc102/tasks/arc100_a",
        "ABC102-D": "https://atcoder.jp/contests/abc102/tasks/arc100_b",
        "ABC103-A": "https://atcoder.jp/contests/abc103/tasks/abc103_a",
        "ABC103-B": "https://atcoder.jp/contests/abc103/tasks/abc103_b",
        "ABC103-C": "https://atcoder.jp/contests/abc103/tasks/abc103_c",
        "ABC103-D": "https://atcoder.jp/contests/abc103/tasks/abc103_d",
        "ABC104-A": "https://atcoder.jp/contests/abc104/tasks/abc104_a",
        "ABC104-B": "https://atcoder.jp/contests/abc104/tasks/abc104_b",
        "ABC104-C": "https://atcoder.jp/contests/abc104/tasks/abc104_c",
        "ABC104-D": "https://atcoder.jp/contests/abc104/tasks/abc104_d",
        "ABC105-A": "https://atcoder.jp/contests/abc105/tasks/abc105_a",
        "ABC105-B": "https://atcoder.jp/contests/abc105/tasks/abc105_b",
        "ABC105-C": "https://atcoder.jp/contests/abc105/tasks/abc105_c",
        "ABC105-D": "https://atcoder.jp/contests/abc105/tasks/abc105_d",
        "ABC106-A": "https://atcoder.jp/contests/abc106/tasks/abc106_a",
        "ABC106-B": "https://atcoder.jp/contests/abc106/tasks/abc106_b",
        "ABC106-C": "https://atcoder.jp/contests/abc106/tasks/abc106_c",
        "ABC106-D": "https://atcoder.jp/contests/abc106/tasks/abc106_d",
        "ABC107-A": "https://atcoder.jp/contests/abc107/tasks/abc107_a",
        "ABC107-B": "https://atcoder.jp/contests/abc107/tasks/abc107_b",
        "ABC107-C": "https://atcoder.jp/contests/abc107/tasks/arc101_a",
        "ABC107-D": "https://atcoder.jp/contests/abc107/tasks/arc101_b",
        "ABC108-A": "https://atcoder.jp/contests/abc108/tasks/abc108_a",
        "ABC108-B": "https://atcoder.jp/contests/abc108/tasks/abc108_b",
        "ABC108-C": "https://atcoder.jp/contests/abc108/tasks/arc102_a",
        "ABC108-D": "https://atcoder.jp/contests/abc108/tasks/arc102_b",
        "ABC109-A": "https://atcoder.jp/contests/abc109/tasks/abc109_a",
        "ABC109-B": "https://atcoder.jp/contests/abc109/tasks/abc109_b",
        "ABC109-C": "https://atcoder.jp/contests/abc109/tasks/abc109_c",
        "ABC109-D": "https://atcoder.jp/contests/abc109/tasks/abc109_d",
        "ABC110-A": "https://atcoder.jp/contests/abc110/tasks/abc110_a",
        "ABC110-B": "https://atcoder.jp/contests/abc110/tasks/abc110_b",
        "ABC110-C": "https://atcoder.jp/contests/abc110/tasks/abc110_c",
        "ABC110-D": "https://atcoder.jp/contests/abc110/tasks/abc110_d",
        "ABC111-A": "https://atcoder.jp/contests/abc111/tasks/abc111_a",
        "ABC111-B": "https://atcoder.jp/contests/abc111/tasks/abc111_b",
        "ABC111-C": "https://atcoder.jp/contests/abc111/tasks/arc103_a",
        "ABC111-D": "https://atcoder.jp/contests/abc111/tasks/arc103_b",
    };

    function walkAndLinkify(node) {
        const walker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT, null);
        const nodesToProcess = [];
        let currentNode;
        while (currentNode = walker.nextNode()) {
            nodesToProcess.push(currentNode);
        }
        for (const textNode of nodesToProcess) {
            linkifyTextNode(textNode, regex);
        }
    }
    function linkifyTextNode(node, regex) {
        const parent = node.parentNode;
        const ignoreTags = ['A', 'SCRIPT', 'STYLE', 'TEXTAREA', 'INPUT', 'CODE', 'PRE'];
        if (!parent || !(parent instanceof HTMLElement) || ignoreTags.includes(parent.tagName)) {
            return;
        }
        const text = node.textContent ?? "";
        let match;
        const matches = [];
        const localRegex = new RegExp(regex);
        while ((match = localRegex.exec(text)) !== null) {
            matches.push({
                start: match.index,
                end: localRegex.lastIndex,
                text: match[0]
            });
        }
        if (matches.length === 0)
            return;
        const fragment = document.createDocumentFragment();
        let lastIndex = 0;
        for (const m of matches) {
            if (m.start > lastIndex) {
                fragment.appendChild(document.createTextNode(text.substring(lastIndex, m.start)));
            }
            const S = m.text;
            const T = S.toLowerCase();
            const tlMatch = T.match(/a[brg]c\d{3}/);
            const trMatch = T.match(/([a-z]{1,2})$/);
            if (tlMatch && trMatch) {
                const T_l = tlMatch[0];
                const T_r = trMatch[1];
                const url = build_problem_url({ contest: T_l, problem: T_r });
                const link = document.createElement('a');
                link.href = url;
                link.textContent = S;
                link.target = '_blank';
                link.rel = 'noopener noreferrer';
                link.style.textDecoration = 'underline';
                link.style.fontWeight = '500';
                fragment.appendChild(link);
            }
            else {
                fragment.appendChild(document.createTextNode(S));
            }
            lastIndex = m.end;
        }
        if (lastIndex < text.length) {
            fragment.appendChild(document.createTextNode(text.substring(lastIndex)));
        }
        parent.replaceChild(fragment, node);
    }
    function build_problem_url(params) {
        const { contest: T_l, problem: T_r } = params;
        if (!T_l.startsWith('abc')) {
            return `https://atcoder.jp/contests/${T_l}/tasks/${T_l}_${T_r}`;
        }
        if (Number(T_l.slice(3)) >= 112) {
            return `https://atcoder.jp/contests/${T_l}/tasks/${T_l}_${T_r}`;
        }
        else if (Number(T_l.slice(3)) >= 42) {
            return from_abc042_to_abc111(T_l.slice(3), T_r);
        }
        else {
            return `https://atcoder.jp/contests/${T_l}/tasks/${T_l}_${alphabet_to_number(T_r).toString()}`;
        }
    }
    function alphabet_to_number(c) {
        return c.charCodeAt(0) - 'a'.charCodeAt(0) + 1;
    }
    function from_abc042_to_abc111(contest, problem) {
        return from_abc042_to_abc111_urls[`ABC${contest.toUpperCase().padStart(3, '0')}-${problem.toUpperCase()}`];
    }

    walkAndLinkify(document.body);
    const observer = new MutationObserver((mutations) => {
        observer.disconnect();
        for (const mutation of mutations) {
            for (const addedNode of mutation.addedNodes) {
                if (addedNode.nodeType === Node.ELEMENT_NODE && addedNode instanceof HTMLElement) {
                    walkAndLinkify(addedNode);
                }
                else if (addedNode.nodeType === Node.TEXT_NODE) {
                    linkifyTextNode(addedNode, regex);
                }
            }
        }
        observe();
    });
    function observe() {
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    }
    observe();

})();