AtCoderTags_Helper

AtCoderTagsへのTag投票を、AtCoder問題ページからTagを選ぶだけで投票できるようにします。

Ekde 2019/12/07. Vidu La ĝisdata versio.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         AtCoderTags_Helper
// @version      1.1
// @author       Null_Null
// @match        https://atcoder.jp/contests/*/tasks/*
// @match        https://*/tasks/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
// @require      https://code.jquery.com/ui/1.12.1/jquery-ui.js
// @grant        none
// @namespace https://github.com/null-null-programming/AtCoderTags-Helper
// @description
// AtCoderTagsへのTag投票を、AtCoder問題ページからTagを選ぶだけで投票できるようにします。
// @description AtCoderTagsへのTag投票を、AtCoder問題ページからTagを選ぶだけで投票できるようにします。
// ==/UserScript==

(function() {})();

function getContestName() {
  let contestURL = location.href;
  let contestArray = contestURL.split('/');
  return contestArray[contestArray.length - 1];
}

$('#copyright').append(`<div style="padding-top:5rem">
                <select  name="tag" size=15 id="area1">
                    <option data-subgroup="Easy" value="Easy">Easy</option>
                    <option data-subgroup="Ad-Hoc" value="Ad-Hoc">Ad-Hoc</option>
                    <option data-subgroup="Searching" value="Searching">Searching</option>
                    <option data-subgroup="Greedy-Methods" value="Greedy-Methods">Greedy-Methods</option>
                    <option data-subgroup="String" value="String">String</option>
                    <option data-subgroup="Mathematics" value="Mathematics">Mathematics</option>
                    <option data-subgroup="Technique" value="Technique">Technique</option>
                    <option data-subgroup="Construct" value="Construct">Construct</option>
                    <option data-subgroup="Graph" value="Graph">Graph</option>
                    <option data-subgroup="Dynamic-Programming" value="Dynamic-Programming">Dynamic-Programming</option>
                    <option data-subgroup="Data-Structure" value="Data-Structure">Data-Structure</option>
                    <option data-subgroup="Game" value="Game">Game</option>
                    <option data-subgroup="Flow-Algorithms" value="Flow-Algorithms">Flow-Algorithms</option>
                    <option data-subgroup="Geometry" value="Geometry">Geometry</option>
                </select>
                <select  name="tag2" id="area2" size=15>

                    <option data-group="Searching" value="Brute-Force">全探索</option>
                    <option data-group="Searching" value="Binary-Search">二分探索</option>
                    <option data-group="Searching" value="Ternary-Search">三分探索</option>
                    <option data-group="Searching" value="DFS">深さ優先探索</option>
                    <option data-group="Searching" value="BFS">幅優先探索</option>
                    <option data-group="Searching" value="Bit-Brute-Force">bit全探索</option>
                    <option data-group="Searching" value="Heuristic">ヒューリスティック</option>
                    <option data-group="Searching" value="Other">その他</option>

                    <option data-group="String" value="String-Operation">文字列処理</option>
                    <option data-group="String" value="Rolling-Hash">ローリングハッシュ</option>
                    <option data-group="String" value="Manacher">Manacher</option>
                    <option data-group="String" value="Suffix-Array">Suffix-Array</option>
                    <option data-group="String" value="Z-Algorithm">Z-Algorithm</option>
                    <option data-group="String" value="Trie">Trie</option>
                    <option data-group="String" value="Other">その他</option>

                    <option data-group="Mathematics" value="Number">整数</option>
                    <option data-group="Mathematics" value="Combinatorics">組み合わせ</option>
                    <option data-group="Mathematics" value="Probability">確率</option>
                    <option data-group="Mathematics" value="Expected-Value">期待値</option>
                    <option data-group="Mathematics" value="Other">その他</option>

                    <option data-group="Technique" value="Cumulative-Sum">累積和</option>
                    <option data-group="Technique" value="imos">imos法</option>
                    <option data-group="Technique" value="Two-Pointers">尺取り法</option>
                    <option data-group="Technique" value="Split-And-List">半分全列挙</option>
                    <option data-group="Technique" value="Square-Division">平方分割</option>
                    <option data-group="Technique" value="Divid-And-Conquer">分割統治法</option>
                    <option data-group="Technique" value="Doubling">ダブリング</option>
                    <option data-group="Technique" value="Other">その他</option>

                    <option data-group="Graph" value="Shortest-Path">最短経路</option>
                    <option data-group="Graph" value="Minimum-Spanning-Tree">最小全域木</option>
                    <option data-group="Graph" value="LCA">最小共通祖先</option>
                    <option data-group="Graph" value="Strongly-Connected-Components">強連結成分分解</option>
                    <option data-group="Graph" value="Topological-Sort">トポロジカルソート</option>
                    <option data-group="Graph" value="Euler-Tour">オイラーツアー</option>
                    <option data-group="Graph" value="HL-Decomposition">HL分解</option>
                    <option data-group="Graph" value="Centroid-Decomposition">重心分解</option>
                    <option data-group="Graph" value="Check-Tree">木の同型判定</option>
                    <option data-group="Graph" value="Two-Edge-Connected-Components">二重辺連結成分分解</option>
                    <option data-group="Graph" value="Bi-Connected-Components">二重頂点連結成分分解</option>
                    <option data-group="Graph" value="Cycle-Basis">サイクル基底</option>
                    <option data-group="Graph" value="dfs-tree">dfs木</option>
                    <option data-group="Graph" value="Erdesh">エルデシュガライの定理</option>
                    <option data-group="Graph" value="Other">その他</option>

                    <option data-group="Dynamic-Programming" value="Simple-DP">基礎DP</option>
                    <option data-group="Dynamic-Programming" value="String-DP">文字列DP</option>
                    <option data-group="Dynamic-Programming" value="Section-DP">区間DP</option>
                    <option data-group="Dynamic-Programming" value="Digit-DP">桁DP</option>
                    <option data-group="Dynamic-Programming" value="Tree-DP">木DP</option>
                    <option data-group="Dynamic-Programming" value="Every-Direction-DP">全方位木DP</option>
                    <option data-group="Dynamic-Programming" value="Bit-DP">bitDP</option>
                    <option data-group="Dynamic-Programming" value="Probability-DP">確率DP</option>
                    <option data-group="Dynamic-Programming" value="Expected-Value-DP">期待値DP</option>
                    <option data-group="Dynamic-Programming" value="Insert-DP">挿入DP</option>
                    <option data-group="Dynamic-Programming" value="Link-DP">連結DP</option>
                    <option data-group="Dynamic-Programming" value="Inline-DP">インラインDP</option>
                    <option data-group="Dynamic-Programming" value="Matrix-Power">行列累乗</option>
                    <option data-group="Dynamic-Programming" value="CHT">Convex-Hull-Trick</option>
                    <option data-group="Dynamic-Programming" value="Monge-DP">Monge-DP</option>
                    <option data-group="Dynamic-Programming" value="Alien-DP">Alien-DP</option>
                    <option data-group="Dynamic-Programming" value="Kitamasa">きたまさ法</option>
                    <option data-group="Dynamic-Programming" value="Other">その他</option>

                    <option data-group="Data-Structure" value="stack">stack</option>
                    <option data-group="Data-Structure" value="queue">queue</option>
                    <option data-group="Data-Structure" value="set">set</option>
                    <option data-group="Data-Structure" value="map">map</option>
                    <option data-group="Data-Structure" value="deque">deque</option>
                    <option data-group="Data-Structure" value="multiset">multiset</option>
                    <option data-group="Data-Structure" value="priority_queue">priority_queue</option>
                    <option data-group="Data-Structure" value="Union-Find-Tree">Union-Find-Tree</option>
                    <option data-group="Data-Structure" value="BIT">Binary-Indexed-Tree</option>
                    <option data-group="Data-Structure" value="Segment-Tree">Segment-Tree</option>
                    <option data-group="Data-Structure" value="Lazy-Segment-Tree">Lazy-Segment-Tree</option>
                    <option data-group="Data-Structure" value="Sparse-Table">Sparse-Table</option>
                    <option data-group="Data-Structure" value="WaveletMatrix">WaveletMatrix</option>
                    <option data-group="Data-Structure" value="Persistent-Data-Structures">永続データ構造</option>
                    <option data-group="Data-Structure" value="Balanced-Tree">平衡二分探索木</option>
                    <option data-group="Data-Structure" value="Other">その他</option>

                    <option data-group="Game" value="Nim">Nim</option>
                    <option data-group="Game" value="Grundy">Grundy数</option>
                    <option data-group="Game" value="Backtrack">後退解析</option>
                    <option data-group="Game" value="Mini-Max">ミニマックス法</option>
                    <option data-group="Game" value="unique">特殊な性質</option>
                    <option data-group="Game" value="Other">その他</option>

                    <option data-group="Flow-Algorithms" value="Max-Flow">最大流問題</option>
                    <option data-group="Flow-Algorithms" value="Min-Cost-Flow">最小費用流問題</option>
                    <option data-group="Flow-Algorithms" value="Bipartite-Matching">二部マッチング</option>
                    <option data-group="Flow-Algorithms" value="Min-Cut">最小カット</option>
                    <option data-group="Flow-Algorithms" value="Burn">燃やす埋める</option>
                    <option data-group="Flow-Algorithms" value="Other">その他</option>

                    <option data-group="Geometry" value="Convex-Hull">凸包</option>
                    <option data-group="Geometry" value="Declination-Sorting">偏角ソート</option>
                    <option data-group="Geometry" value="Three-D">三次元</option>
                    <option data-group="Geometry" value="Other">その他</option>
                </select>
                <br>
                <br>

                <input id="atcoder_tag_vote" type="submit" value="Submit" class="btn btn-primary">
</div>`);

(async function() {
    $('#atcoder_tag_vote').click(function() {
      var name=$('#area1').val();
      var name2=$('#area2').val();
      var probleme_id = getContestName();
      window.open().location.href =(('https://atcoder-tags.herokuapp.com/vote_result?problem_id=' + probleme_id + '&tag=' + name +'&tag2='+name2))
    })
})();
(async function(){
//地域セレクトボックスイベント設定
    setHierarchySelectEvent('#area1', '#area2');
    //セレクトボックスの初期値
    $('#area1').val('1').change();
    $('#area2').val('2').change();

    function setHierarchySelectEvent(parentSelect, childSelect) {
        var initCategorySmallHtml = $(childSelect).html();
        $(parentSelect).change(function () {
            if (1 < $(this).find('option:selected').length) {//複数選択時に処理
                $(childSelect).find("option").each(function (index, element) {
                    $(element).remove();
                });
            } else {
                var subgroup = $(this).find('option:selected').attr('data-subgroup');
                $(childSelect).html(initCategorySmallHtml);
                $(childSelect).find("option").each(function (index, element) {
                    var group = $(element).attr('data-group');
                    if (group) {
                        if (subgroup == group) {
                            //$(element).css('display', 'block');//IEではoptionタグに対してdisplayは効かないため
                        } else {
                            //$(element).css('display', 'none');//IEではoptionタグに対してdisplayは効かないため
                            $(element).remove();
                        }
                    }
                });
            }
            $(childSelect).val('').change();//未選択時の値は''じゃない場合は書き換えてね
        });
    }
})();