您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
競プロ典型 90 問に解説リンク(Twitter)を追加する
// ==UserScript== // @name typical90-direct-editorial-link // @namespace https://github.com/hotarunx // @version 1.0.1 // @description 競プロ典型 90 問に解説リンク(Twitter)を追加する // @author hotarunx // @license MIT // @supportURL https://github.com/hotarunx/typical90-direct-editorial-link/issues // @match https://atcoder.jp/contests/typical90/tasks/* // @exclude https://atcoder.jp/contests/typical90/tasks/*/* // ==/UserScript== const problems = [ "https://twitter.com/e869120/status/1376665578513989633", "https://twitter.com/e869120/status/1377027868518064129", "https://twitter.com/e869120/status/1377391097836544001", "https://twitter.com/e869120/status/1377752658149175299", "https://twitter.com/e869120/status/1378115289649348611", "https://twitter.com/e869120/status/1378840212449595393", "https://twitter.com/e869120/status/1379202843622576130", "https://twitter.com/e869120/status/1379565222541680644", "https://twitter.com/e869120/status/1379927227739987972", "https://twitter.com/e869120/status/1380290146340245505", "https://twitter.com/e869120/status/1380652465834532865", "https://twitter.com/e869120/status/1381376542836596737", "https://twitter.com/e869120/status/1381739128291614720", "https://twitter.com/e869120/status/1382101716066127872", "https://twitter.com/e869120/status/1382478816627478530", "https://twitter.com/e869120/status/1382827276673306624", "https://twitter.com/e869120/status/1383189464650981378", "https://twitter.com/e869120/status/1383913627325853696", "https://twitter.com/e869120/status/1384276005330690049", "https://twitter.com/e869120/status/1384638694162780166", "https://twitter.com/e869120/status/1385001057512693762", "https://twitter.com/e869120/status/1385363292739104775", "https://twitter.com/e869120/status/1385725481920520193", "https://twitter.com/e869120/status/1386449961072553990", "https://twitter.com/e869120/status/1386814047081746432", "https://twitter.com/e869120/status/1387175538544975872", "https://twitter.com/e869120/status/1387538790017769474", "https://twitter.com/e869120/status/1387901052683386880", "https://twitter.com/e869120/status/1388262816101007363", "https://twitter.com/e869120/status/1388987881977389059", "https://twitter.com/e869120/status/1389349360866009090", "https://twitter.com/e869120/status/1389711962213261316", "https://twitter.com/e869120/status/1390074137192767489", "https://twitter.com/e869120/status/1390436977808351234", "https://twitter.com/e869120/status/1390798852299448322", "https://twitter.com/e869120/status/1391523624897499136", "https://twitter.com/e869120/status/1391886390091075586", "https://twitter.com/e869120/status/1392248540882116610", "https://twitter.com/e869120/status/1392612322410057729", "https://twitter.com/e869120/status/1392974101061378049", "https://twitter.com/e869120/status/1393336369540341760", "https://twitter.com/e869120/status/1394062245181595653", "https://twitter.com/e869120/status/1394423616805097477", "https://twitter.com/e869120/status/1394787605099601923", "https://twitter.com/e869120/status/1395148057730187265", "https://twitter.com/e869120/status/1395510657634619394", "https://twitter.com/e869120/status/1395873457259225091", "https://twitter.com/e869120/status/1396597231248044040", "https://twitter.com/e869120/status/1396960059796582400", "https://twitter.com/e869120/status/1397322487554199553", "https://twitter.com/e869120/status/1397684795560259586", "https://twitter.com/e869120/status/1398046858933538819", "https://twitter.com/e869120/status/1398409831044632576", "https://twitter.com/e869120/status/1399135833425203200", "https://twitter.com/e869120/status/1399496993014116352", "https://twitter.com/e869120/status/1399859200046505984", "https://twitter.com/e869120/status/1400221404109230082", "https://twitter.com/e869120/status/1400584377902399490", "https://twitter.com/e869120/status/1400947432440008704", "https://twitter.com/e869120/status/1401670952857964545", "https://twitter.com/e869120/status/1402034055734980608", "https://twitter.com/e869120/status/1402395219287371779", "https://twitter.com/e869120/status/1402758934268571648", "https://twitter.com/e869120/status/1403121388773249024", "https://twitter.com/e869120/status/1403483256234799105", "https://twitter.com/e869120/status/1404207052084244481", "https://twitter.com/e869120/status/1404571956700008448", "https://twitter.com/e869120/status/1404931743820357633", "https://twitter.com/e869120/status/1405298187384999938", "https://twitter.com/e869120/status/1405659999179722754", "https://twitter.com/e869120/status/1406020809492090882", "https://twitter.com/e869120/status/1406743672603901953", "https://twitter.com/e869120/status/1407109731546636289", "https://twitter.com/e869120/status/1407510677934149635", "https://twitter.com/e869120/status/1407833847413178372", "https://twitter.com/e869120/status/1408195203538690048", "https://twitter.com/e869120/status/1408599656209080322", "https://twitter.com/e869120/status/1409280796548997122", "https://twitter.com/e869120/status/1409644684561944579", "https://twitter.com/e869120/status/1410007233262276612", "https://twitter.com/e869120/status/1410368312760934404", "https://twitter.com/e869120/status/1410732179743657986", "https://twitter.com/e869120/status/1411094412319330305", "https://twitter.com/e869120/status/1411817107336007687", "https://twitter.com/e869120/status/1412179495868534784", "https://twitter.com/e869120/status/1412541885160189952", "https://twitter.com/e869120/status/1412904274900754441", "https://twitter.com/e869120/status/1413266660862009348", "https://twitter.com/e869120/status/1413629046282280963", "https://twitter.com/e869120/status/1414011564458348548", ]; const editorials = [ "https://twitter.com/e869120/status/1377027868518064129", "https://twitter.com/e869120/status/1377391097836544001", "https://twitter.com/e869120/status/1377752658149175299", "https://twitter.com/e869120/status/1378115289649348611", "https://twitter.com/e869120/status/1378527948563615746", "https://twitter.com/e869120/status/1379202843622576130", "https://twitter.com/e869120/status/1379565222541680644", "https://twitter.com/e869120/status/1379927227739987972", "https://twitter.com/e869120/status/1380290146340245505", "https://twitter.com/e869120/status/1380652465834532865", "https://twitter.com/e869120/status/1381064464049401856", "https://twitter.com/e869120/status/1381739128291614720", "https://twitter.com/e869120/status/1382101716066127872", "https://twitter.com/e869120/status/1382478816627478530", "https://twitter.com/e869120/status/1382827276673306624", "https://twitter.com/e869120/status/1383189464650981378", "https://twitter.com/e869120/status/1383635232134287360", "https://twitter.com/e869120/status/1384276005330690049", "https://twitter.com/e869120/status/1384638694162780166", "https://twitter.com/e869120/status/1385001057512693762", "https://twitter.com/e869120/status/1385363292739104775", "https://twitter.com/e869120/status/1385725481920520193", "https://twitter.com/e869120/status/1386138990361726978", "https://twitter.com/e869120/status/1386814047081746432", "https://twitter.com/e869120/status/1387175538544975872", "https://twitter.com/e869120/status/1387538790017769474", "https://twitter.com/e869120/status/1387901052683386880", "https://twitter.com/e869120/status/1388262816101007363", "https://twitter.com/e869120/status/1388674962823663619", "https://twitter.com/e869120/status/1389349360866009090", "https://twitter.com/e869120/status/1389711962213261316", "https://twitter.com/e869120/status/1390074137192767489", "https://twitter.com/e869120/status/1390436977808351234", "https://twitter.com/e869120/status/1390798852299448322", "https://twitter.com/e869120/status/1391218516129312768", "https://twitter.com/e869120/status/1391886390091075586", "https://twitter.com/e869120/status/1392248540882116610", "https://twitter.com/e869120/status/1392612322410057729", "https://twitter.com/e869120/status/1392974101061378049", "https://twitter.com/e869120/status/1393336369540341760", "https://twitter.com/e869120/status/1393753066331992065", "https://twitter.com/e869120/status/1394423616805097477", "https://twitter.com/e869120/status/1394787605099601923", "https://twitter.com/e869120/status/1395148057730187265", "https://twitter.com/e869120/status/1395510657634619394", "https://twitter.com/e869120/status/1395873457259225091", "https://twitter.com/e869120/status/1396289540222906368", "https://twitter.com/e869120/status/1396960059796582400", "https://twitter.com/e869120/status/1397322487554199553", "https://twitter.com/e869120/status/1397684795560259586", "https://twitter.com/e869120/status/1398046858933538819", "https://twitter.com/e869120/status/1398409831044632576", "https://twitter.com/e869120/status/1398827248698810369", "https://twitter.com/e869120/status/1399496993014116352", "https://twitter.com/e869120/status/1399859200046505984", "https://twitter.com/e869120/status/1400221404109230082", "https://twitter.com/e869120/status/1400584377902399490", "https://twitter.com/e869120/status/1400947432440008704", "https://twitter.com/e869120/status/1401357950686429193", "https://twitter.com/e869120/status/1402034055734980608", "https://twitter.com/e869120/status/1402395219287371779", "https://twitter.com/e869120/status/1402758934268571648", "https://twitter.com/e869120/status/1403121388773249024", "https://twitter.com/e869120/status/1403483256234799105", "https://twitter.com/e869120/status/1403901094007173120", "https://twitter.com/e869120/status/1404571956700008448", "https://twitter.com/e869120/status/1404931743820357633", "https://twitter.com/e869120/status/1405298187384999938", "https://twitter.com/e869120/status/1405659999179722754", "https://twitter.com/e869120/status/1406020809492090882", "https://twitter.com/e869120/status/1406429317249126402", "https://twitter.com/e869120/status/1407109731546636289", "https://twitter.com/e869120/status/1407510677934149635", "https://twitter.com/e869120/status/1407833847413178372", "https://twitter.com/e869120/status/1408195203538690048", "https://twitter.com/e869120/status/1408599656209080322", "https://twitter.com/e869120/status/1408978156137025545", "https://twitter.com/e869120/status/1409644684561944579", "https://twitter.com/e869120/status/1410007233262276612", "https://twitter.com/e869120/status/1410368312760934404", "https://twitter.com/e869120/status/1410732179743657986", "https://twitter.com/e869120/status/1411094412319330305", "https://twitter.com/e869120/status/1411508237522767873", "https://twitter.com/e869120/status/1412179495868534784", "https://twitter.com/e869120/status/1412541885160189952", "https://twitter.com/e869120/status/1412904274900754441", "https://twitter.com/e869120/status/1413266660862009348", "https://twitter.com/e869120/status/1413629046282280963", "https://twitter.com/e869120/status/1413991433153912832", "https://twitter.com/e869120/status/1414166071594999811", ]; const codes = [ "https://github.com/E869120/kyopro_educational_90/blob/main/sol/001.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/002.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/003.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/004.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/005-03.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/006.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/007.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/008.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/009.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/010.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/011-03.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/012.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/013.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/014.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/015.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/016.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/017-03.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/018.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/019.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/020.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/021.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/022.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/023-04b.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/024.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/025.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/026.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/027.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/028.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/029-03.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/030.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/031.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/032.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/033.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/034.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/035-04.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/036.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/037.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/038.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/039.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/040.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/041-03.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/042.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/043.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/044.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/045.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/046.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/047-02.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/048.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/049.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/050.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/051.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/052.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/053-04.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/054.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/055.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/056.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/057.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/058.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/059-02.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/060.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/061-02.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/062.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/063.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/064.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/065-03.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/066a.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/067.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/068b.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/069.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/070.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/071-03.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/072.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/073.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/074.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/075.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/076.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/077-04b.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/078.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/079.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/080a.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/081.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/082a.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/083-02a.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/084-02.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/085.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/086.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/087.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/088.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/089-05.cpp", "https://github.com/E869120/kyopro_educational_90/blob/main/sol/090-07b.cpp", ]; const problemsApi = [ { contest_id: "typical90", id: "typical90_a", name: "Yokan Party(★4)", problem_index: "001", title: "001. Yokan Party(★4)", }, { contest_id: "typical90", id: "typical90_aa", name: "Sign Up Requests (★2)", problem_index: "027", title: "027. Sign Up Requests (★2)", }, { contest_id: "typical90", id: "typical90_ab", name: "Cluttered Paper(★4)", problem_index: "028", title: "028. Cluttered Paper(★4)", }, { contest_id: "typical90", id: "typical90_ac", name: "Long Bricks(★5)", problem_index: "029", title: "029. Long Bricks(★5)", }, { contest_id: "typical90", id: "typical90_ad", name: "K Factors(★5)", problem_index: "030", title: "030. K Factors(★5)", }, { contest_id: "typical90", id: "typical90_ae", name: "VS AtCoder(★6)", problem_index: "031", title: "031. VS AtCoder(★6)", }, { contest_id: "typical90", id: "typical90_af", name: "AtCoder Ekiden(★3)", problem_index: "032", title: "032. AtCoder Ekiden(★3)", }, { contest_id: "typical90", id: "typical90_ag", name: "Not Too Bright(★2)", problem_index: "033", title: "033. Not Too Bright(★2)", }, { contest_id: "typical90", id: "typical90_ah", name: "There are few types of elements(★4)", problem_index: "034", title: "034. There are few types of elements(★4)", }, { contest_id: "typical90", id: "typical90_ai", name: "Preserve Connectivity(★7)", problem_index: "035", title: "035. Preserve Connectivity(★7)", }, { contest_id: "typical90", id: "typical90_aj", name: "Max Manhattan Distance(★5)", problem_index: "036", title: "036. Max Manhattan Distance(★5)", }, { contest_id: "typical90", id: "typical90_ak", name: "Don't Leave the Spice(★5)", problem_index: "037", title: "037. Don't Leave the Spice(★5)", }, { contest_id: "typical90", id: "typical90_al", name: "Large LCM(★3)", problem_index: "038", title: "038. Large LCM(★3)", }, { contest_id: "typical90", id: "typical90_am", name: "Tree Distance(★5)", problem_index: "039", title: "039. Tree Distance(★5)", }, { contest_id: "typical90", id: "typical90_an", name: "Get More Money(★7)", problem_index: "040", title: "040. Get More Money(★7)", }, { contest_id: "typical90", id: "typical90_ao", name: "Piles in AtCoder Farm(★7)", problem_index: "041", title: "041. Piles in AtCoder Farm(★7)", }, { contest_id: "typical90", id: "typical90_ap", name: "Multiple of 9(★4)", problem_index: "042", title: "042. Multiple of 9(★4)", }, { contest_id: "typical90", id: "typical90_aq", name: "Maze Challenge with Lack of Sleep(★4)", problem_index: "043", title: "043. Maze Challenge with Lack of Sleep(★4)", }, { contest_id: "typical90", id: "typical90_ar", name: "Shift and Swapping(★3)", problem_index: "044", title: "044. Shift and Swapping(★3)", }, { contest_id: "typical90", id: "typical90_as", name: "Simple Grouping(★6)", problem_index: "045", title: "045. Simple Grouping(★6)", }, { contest_id: "typical90", id: "typical90_at", name: "I Love 46(★3)", problem_index: "046", title: "046. I Love 46(★3)", }, { contest_id: "typical90", id: "typical90_au", name: "Monochromatic Diagonal(★7)", problem_index: "047", title: "047. Monochromatic Diagonal(★7)", }, { contest_id: "typical90", id: "typical90_av", name: "I will not drop out(★3)", problem_index: "048", title: "048. I will not drop out(★3)", }, { contest_id: "typical90", id: "typical90_aw", name: "Flip Digits 2(★6)", problem_index: "049", title: "049. Flip Digits 2(★6)", }, { contest_id: "typical90", id: "typical90_ax", name: "Stair Jump(★3)", problem_index: "050", title: "050. Stair Jump(★3)", }, { contest_id: "typical90", id: "typical90_ay", name: "Typical Shop(★5)", problem_index: "051", title: "051. Typical Shop(★5)", }, { contest_id: "typical90", id: "typical90_az", name: "Dice Product(★3)", problem_index: "052", title: "052. Dice Product(★3)", }, { contest_id: "typical90", id: "typical90_b", name: "Encyclopedia of Parentheses(★3)", problem_index: "002", title: "002. Encyclopedia of Parentheses(★3)", }, { contest_id: "typical90", id: "typical90_ba", name: "Discrete Dowsing(★7)", problem_index: "053", title: "053. Discrete Dowsing(★7)", }, { contest_id: "typical90", id: "typical90_bb", name: "Takahashi Number(★6)", problem_index: "054", title: "054. Takahashi Number(★6)", }, { contest_id: "typical90", id: "typical90_bc", name: "Select 5(★2)", problem_index: "055", title: "055. Select 5(★2)", }, { contest_id: "typical90", id: "typical90_bd", name: "Lucky Bag(★5)", problem_index: "056", title: "056. Lucky Bag(★5)", }, { contest_id: "typical90", id: "typical90_be", name: "Flip Flap(★6)", problem_index: "057", title: "057. Flip Flap(★6)", }, { contest_id: "typical90", id: "typical90_bf", name: "Original Calculator(★4)", problem_index: "058", title: "058. Original Calculator(★4)", }, { contest_id: "typical90", id: "typical90_bg", name: "Many Graph Queries(★7)", problem_index: "059", title: "059. Many Graph Queries(★7)", }, { contest_id: "typical90", id: "typical90_bh", name: "Chimera(★5)", problem_index: "060", title: "060. Chimera(★5)", }, { contest_id: "typical90", id: "typical90_bi", name: "Deck(★2)", problem_index: "061", title: "061. Deck(★2)", }, { contest_id: "typical90", id: "typical90_bj", name: "Paint All(★6)", problem_index: "062", title: "062. Paint All(★6)", }, { contest_id: "typical90", id: "typical90_bk", name: "Monochromatic Subgrid(★4)", problem_index: "063", title: "063. Monochromatic Subgrid(★4)", }, { contest_id: "typical90", id: "typical90_bl", name: "Uplift(★3)", problem_index: "064", title: "064. Uplift(★3)", }, { contest_id: "typical90", id: "typical90_bm", name: "RGB Balls 2(★7)", problem_index: "065", title: "065. RGB Balls 2(★7)", }, { contest_id: "typical90", id: "typical90_bn", name: "Various Arrays(★5)", problem_index: "066", title: "066. Various Arrays(★5)", }, { contest_id: "typical90", id: "typical90_bo", name: "Base 8 to 9(★2)", problem_index: "067", title: "067. Base 8 to 9(★2)", }, { contest_id: "typical90", id: "typical90_bp", name: "Paired Information(★5)", problem_index: "068", title: "068. Paired Information(★5)", }, { contest_id: "typical90", id: "typical90_bq", name: "Colorful Blocks 2(★3)", problem_index: "069", title: "069. Colorful Blocks 2(★3)", }, { contest_id: "typical90", id: "typical90_br", name: "Plant Planning(★4)", problem_index: "070", title: "070. Plant Planning(★4)", }, { contest_id: "typical90", id: "typical90_bs", name: "Fuzzy Priority(★7)", problem_index: "071", title: "071. Fuzzy Priority(★7)", }, { contest_id: "typical90", id: "typical90_bt", name: "Loop Railway Plan(★4)", problem_index: "072", title: "072. Loop Railway Plan(★4)", }, { contest_id: "typical90", id: "typical90_bu", name: "We Need Both a and b(★5)", problem_index: "073", title: "073. We Need Both a and b(★5)", }, { contest_id: "typical90", id: "typical90_bv", name: "ABC String 2(★6)", problem_index: "074", title: "074. ABC String 2(★6)", }, { contest_id: "typical90", id: "typical90_bw", name: "Magic For Balls(★3)", problem_index: "075", title: "075. Magic For Balls(★3)", }, { contest_id: "typical90", id: "typical90_bx", name: "Cake Cut(★3)", problem_index: "076", title: "076. Cake Cut(★3)", }, { contest_id: "typical90", id: "typical90_by", name: "Planes on a 2D Plane(★7)", problem_index: "077", title: "077. Planes on a 2D Plane(★7)", }, { contest_id: "typical90", id: "typical90_bz", name: "Easy Graph Problem(★2)", problem_index: "078", title: "078. Easy Graph Problem(★2)", }, { contest_id: "typical90", id: "typical90_c", name: "Longest Circular Road(★4)", problem_index: "003", title: "003. Longest Circular Road(★4)", }, { contest_id: "typical90", id: "typical90_ca", name: "Two by Two(★3)", problem_index: "079", title: "079. Two by Two(★3)", }, { contest_id: "typical90", id: "typical90_cb", name: "Let's Share Bit(★6)", problem_index: "080", title: "080. Let's Share Bit(★6)", }, { contest_id: "typical90", id: "typical90_cc", name: "Friendly Group(★5)", problem_index: "081", title: "081. Friendly Group(★5)", }, { contest_id: "typical90", id: "typical90_cd", name: "Counting Numbers(★3)", problem_index: "082", title: "082. Counting Numbers(★3)", }, { contest_id: "typical90", id: "typical90_ce", name: "Colorful Graph(★6)", problem_index: "083", title: "083. Colorful Graph(★6)", }, { contest_id: "typical90", id: "typical90_cf", name: "There are two types of characters(★3)", problem_index: "084", title: "084. There are two types of characters(★3)", }, { contest_id: "typical90", id: "typical90_cg", name: "Multiplication 085(★4)", problem_index: "085", title: "085. Multiplication 085(★4)", }, { contest_id: "typical90", id: "typical90_ch", name: "Snuke's Favorite Arrays(★5)", problem_index: "086", title: "086. Snuke's Favorite Arrays(★5)", }, { contest_id: "typical90", id: "typical90_ci", name: "Chokudai's Demand(★5)", problem_index: "087", title: "087. Chokudai's Demand(★5)", }, { contest_id: "typical90", id: "typical90_cj", name: "Similar but Different Ways(★6)", problem_index: "088", title: "088. Similar but Different Ways(★6)", }, { contest_id: "typical90", id: "typical90_ck", name: "Partitions and Inversions(★7)", problem_index: "089", title: "089. Partitions and Inversions(★7)", }, { contest_id: "typical90", id: "typical90_cl", name: "Tenkei90's Last Problem(★7)", problem_index: "090", title: "090. Tenkei90's Last Problem(★7)", }, { contest_id: "typical90", id: "typical90_d", name: "Cross Sum(★2)", problem_index: "004", title: "004. Cross Sum(★2)", }, { contest_id: "typical90", id: "typical90_e", name: "Restricted Digits(★7)", problem_index: "005", title: "005. Restricted Digits(★7)", }, { contest_id: "typical90", id: "typical90_f", name: "Smallest Subsequence(★5)", problem_index: "006", title: "006. Smallest Subsequence(★5)", }, { contest_id: "typical90", id: "typical90_g", name: "CP Classes(★3)", problem_index: "007", title: "007. CP Classes(★3)", }, { contest_id: "typical90", id: "typical90_h", name: "AtCounter(★4)", problem_index: "008", title: "008. AtCounter(★4)", }, { contest_id: "typical90", id: "typical90_i", name: "Three Point Angle(★6)", problem_index: "009", title: "009. Three Point Angle(★6)", }, { contest_id: "typical90", id: "typical90_j", name: "Score Sum Queries(★2)", problem_index: "010", title: "010. Score Sum Queries(★2)", }, { contest_id: "typical90", id: "typical90_k", name: "Gravy Jobs(★6)", problem_index: "011", title: "011. Gravy Jobs(★6)", }, { contest_id: "typical90", id: "typical90_l", name: "Red Painting(★4)", problem_index: "012", title: "012. Red Painting(★4)", }, { contest_id: "typical90", id: "typical90_m", name: "Passing(★5)", problem_index: "013", title: "013. Passing(★5)", }, { contest_id: "typical90", id: "typical90_n", name: "We Used to Sing a Song Together(★3)", problem_index: "014", title: "014. We Used to Sing a Song Together(★3)", }, { contest_id: "typical90", id: "typical90_o", name: "Don't be too close(★6)", problem_index: "015", title: "015. Don't be too close(★6)", }, { contest_id: "typical90", id: "typical90_p", name: "Minimum Coins(★3)", problem_index: "016", title: "016. Minimum Coins(★3)", }, { contest_id: "typical90", id: "typical90_q", name: "Crossing Segments(★7)", problem_index: "017", title: "017. Crossing Segments(★7)", }, { contest_id: "typical90", id: "typical90_r", name: "Statue of Chokudai(★3)", problem_index: "018", title: "018. Statue of Chokudai(★3)", }, { contest_id: "typical90", id: "typical90_s", name: "Pick Two(★6)", problem_index: "019", title: "019. Pick Two(★6)", }, { contest_id: "typical90", id: "typical90_t", name: "Log Inequality(★3)", problem_index: "020", title: "020. Log Inequality(★3)", }, { contest_id: "typical90", id: "typical90_u", name: "Come Back in One Piece(★5)", problem_index: "021", title: "021. Come Back in One Piece(★5)", }, { contest_id: "typical90", id: "typical90_v", name: "Cubic Cake(★2)", problem_index: "022", title: "022. Cubic Cake(★2)", }, { contest_id: "typical90", id: "typical90_w", name: "Avoid War(★7)", problem_index: "023", title: "023. Avoid War(★7)", }, { contest_id: "typical90", id: "typical90_x", name: "Select +/- One(★2)", problem_index: "024", title: "024. Select +/- One(★2)", }, { contest_id: "typical90", id: "typical90_y", name: "Digit Product Equation(★7)", problem_index: "025", title: "025. Digit Product Equation(★7)", }, { contest_id: "typical90", id: "typical90_z", name: "Independent Set on a Tree(★4)", problem_index: "026", title: "026. Independent Set on a Tree(★4)", }, ]; // AtCoderの問題ページをパースする /** * URLをパースする パラメータを消す \ * 例: in: https://atcoder.jp/contests/abc210?lang=en \ * 例: out: (5)['https:', '', 'atcoder.jp', 'contests', 'abc210'] */ const parseURL = (url) => { // 区切り文字`/`で分割する // ?以降の文字列を削除してパラメータを削除する return url.split("/").map((x) => x.replace(/\?.*/i, "")); }; const URL = parseURL(window.location.href); /** * 表セル要素から、前の要素のテキストが引数と一致する要素を探す * 個別の提出ページで使うことを想定 * 例: searchSubmissionInfo(["問題", "Task"]) */ const searchSubmissionInfo = (key) => { const tdTags = document.getElementsByTagName("td"); const tdTagsArray = Array.prototype.slice.call(tdTags); return tdTagsArray.filter((elem) => { const prevElem = elem.previousElementSibling; const text = prevElem?.textContent; if (typeof text === "string") return key.includes(text); return false; })[0]; }; /** コンテストタイトル 例: AtCoder Beginner Contest 210 */ document.getElementsByClassName("contest-title")[0]?.textContent ?? ""; /** コンテストID 例: abc210 */ URL[4] ?? ""; /** * ページ種類 \ * 基本的にコンテストIDの次のパス * ### 例外 * 個別の問題: task * 個別の提出: submission * 個別の問題ページで解説ボタンを押すと遷移する個別の問題の解説一覧ページ: task_editorial */ const pageType = (() => { if (URL.length < 6) return ""; if (URL.length >= 7 && URL[5] === "submissions" && URL[6] !== "me") return "submission"; if (URL.length >= 8 && URL[5] === "tasks" && URL[7] === "editorial") return "task_editorial"; if (URL.length >= 7 && URL[5] === "tasks") return "task"; return URL[5] ?? ""; })(); /** 問題ID 例: abc210_a */ const taskID = (() => { if (pageType === "task") { // 問題ページでは、URLから問題IDを取り出す return URL[6] ?? ""; } if (pageType === "submission") { // 個別の提出ページでは、問題リンクのURLから問題IDを取り出す // 提出情報の問題のURLを取得する const taskCell = searchSubmissionInfo(["問題", "Task"]); if (!taskCell) return ""; const taskLink = taskCell.getElementsByTagName("a")[0]; if (!taskLink) return ""; const taskUrl = parseURL(taskLink.href); const taskIDParsed = taskUrl[6] ?? ""; return taskIDParsed; } return ""; })(); /** 問題名 例: A - Cabbages */ (() => { if (pageType === "task") { // 問題ページでは、h2から問題名を取り出す return (document .getElementsByClassName("h2")[0] ?.textContent?.trim() .replace(/\n.*/i, "") ?? ""); } if (pageType === "submission") { // 個別の提出ページでは、問題リンクのテキストから問題名を取り出す // 提出情報の問題のテキストを取得する const taskCell = searchSubmissionInfo(["問題", "Task"]); if (!taskCell) return ""; const taskLink = taskCell.getElementsByTagName("a")[0]; if (!taskLink) return ""; return taskLink.textContent ?? ""; } return ""; })(); /** 提出ユーザー 例: machikane */ (() => { if (pageType !== "submission") return ""; // 個別の提出ページのとき const userCell = searchSubmissionInfo(["ユーザ", "User"]); if (!userCell) return ""; return userCell?.textContent?.trim() ?? ""; })(); /** 提出結果 例: AC */ (() => { if (pageType !== "submission") return ""; // 個別の提出ページのとき const statusCell = searchSubmissionInfo(["結果", "Status"]); if (!statusCell) return ""; return statusCell?.textContent?.trim() ?? ""; })(); /** 得点 例: 100 */ (() => { if (pageType !== "submission") return 0; // 個別の提出ページのとき const scoreCell = searchSubmissionInfo(["得点", "Score"]); if (!scoreCell) return 0; return parseInt(scoreCell?.textContent?.trim() ?? "0", 10); })(); /** * 最初に実行される部分 */ (() => { const h2 = document.getElementsByClassName("h2")[0]; if (!h2) return; const index = Number(problemsApi.find((e) => e.id === taskID)?.problem_index) - 1; h2.insertAdjacentHTML("beforeend", `<a class="btn btn-info btn-sm" href="${problems[index] ?? "https://atcoder.jp/contests/typical90"}" target="_blank">問題</a>`); h2.insertAdjacentHTML("beforeend", `<a class="btn btn-info btn-sm" href="${editorials[index] ?? "https://atcoder.jp/contests/typical90"}" target="_blank">解説</a>`); h2.insertAdjacentHTML("beforeend", `<a class="btn btn-info btn-sm" href="${codes[index] ?? "https://atcoder.jp/contests/typical90"}" target="_blank">コード</a>`); })();