個人戦績検索

「個人戦績検索」の編集履歴(バックアップ)一覧はこちら

個人戦績検索」(2016/01/20 (水) 02:31:58) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

#divclass(ao){レーティング個人戦績検索} このページはjavascriptを用いてwikiのページを解析することによってレーティング個人戦績を検索します。 何も表示されない場合、javascriptをONにしてください。 #divclass(simulation){ } ※検索名は完全一致のみ対応 #divclass(rating){ } #js(){{ var ratingMap = {}; var testHistory = {}; var initCharacter = function(map, name) { if (!map[name]) { map[name] = { rate: 1500, matches: 0 }; } return map; }; var calc = function(map, winner, looser) { map = initCharacter(map, winner.name); map = initCharacter(map, looser.name); // 浮動小数点数の計算誤差のため整数計算する winner.c = looser.c = 5; // 収束係数(c) *10 var dc; if (map[winner.name].matches < 4) { dc = (4 - map[winner.name].matches); winner.c += dc; looser.c -= dc; } if (map[looser.name].matches < 4) { dc = (4 - map[looser.name].matches); winner.c -= dc; looser.c += dc; } // 浮動小数点数に戻す winner.c /= 10; looser.c /= 10; if (winner.point != 50) { winner.c = 1 - Math.pow(1 - winner.c, winner.point / 50.0); looser.c = 1 - Math.pow(1 - looser.c, winner.point / 50.0); } // レート変動幅(d) var weight = 20; // 変動幅係数(e) var length = winner.point == 50 ? 1 : 50.0 / winner.point; // (-A + B + d*(n-m)*e) winner.balance = -map[winner.name].rate + map[looser.name].rate + weight * (winner.point - looser.point) * length ; looser.balance = -map[looser.name].rate + map[winner.name].rate + weight * (looser.point - winner.point) * length ; // レート増減分: c * (-A + B + d*(n-m)*e) / 2 winner.charge = winner.c * winner.balance / 2.0; looser.charge = looser.c * looser.balance / 2.0; map[winner.name].rate += winner.charge; map[looser.name].rate += looser.charge; map[winner.name].matches++; map[looser.name].matches++; return map; }; var display = function(map, target) { if (!target) { target = ".rating"; } var displayMap = []; var displayMapIndex = 0; $.each(map, function(name, data) { displayMap[displayMapIndex] = data; displayMap[displayMapIndex++].name = name; }); displayMap.sort(function(a, b) { if (a.rate > b.rate) { return -1; } else if(a.rate < b.rate) { return 1; } return 0; }); var html = "<table><thead><tr><th>HN</th><th>レーティング</th><th>対戦回数</th></tr></thead><tbody id=\"ratings\">"; for(var i = 0; i < displayMap.length; i++) { var data = displayMap[i]; html += "<tr><th>" + data.name + "</th><th>" + parseInt(data.rate) + "</th><th>" + data.matches + "</th></th>" ; } html += "</tbody></table>"; $(target).html(html); }; var searchName = location.search ? decodeURI(location.search).substr(1) : ""; var searchForm = function() { var testForm = $("<form>"), table = $("<table>"), header = $("<thead>"), body = $("<tbody>"), container = $(".simulation") ; container.empty(); header.append($("<tr><th>名前</th><th>&nbsp;</th></tr>")); var row = $("<tr>"); var addCol = function(colBody) { var col = $("<td>"); col.append(colBody); row.append(col); } var addInput = function(id, length) { var input = $("<input>"); input .attr("type", "text") .attr("size", length) .attr("id", id) ; addCol(input); }; addInput("test-search-name", 10); addCol($("<input>").attr("type", "submit").attr("value", "検索")); body .attr("id", "test-rows") .append(row) ; table .append(header) .append(body) ; testForm .attr("id", "test-form") .append(table) .submit(function() { searchName = $("#test-search-name").val(); loadRatingMap(); if ($("#test-clear-inputs").is(':checked')) { $("#test-search-name").val(""); } $("#test-search-name").focus(); return false; }) ; container.append(testForm); }; var ajaxHandler = function() { $("#test-search-name").val(searchName); loadRatingMap(); }; // pjax用 $(function(){ var popped = ('state' in window.history); var initialURL = document.URL; if(window.history && window.history.pushState) { $(window).bind("popstate", function(){ var initialPop = (!popped && document.URL == initialURL); var popped = true; if (!initialPop) { ajaxHandler(); } return false }); } }); var linkify = function(name) { if (searchName == name) { return name; } var url = document.URL.replace(/\?.*$/, "") + "?" + encodeURI(name); return $("<a>") .text(name) .attr("href", url) .click(function() { if (window.history && window.history.pushState) { window.history.pushState("", "", this.href); searchName = name; ajaxHandler(); return false; } }) ; } var loadRatingMap = function() { if (searchName == "") { searchForm(); return; } $.ajax({ type: "GET", url : "17.html", beforeSend: function(XMLHttpRequest) { $(".rating").html("過去の戦跡読み込み中..."); }, error: function() { $(".rating").html("戦跡の読み込みに失敗しました"); }, success: function(backupdata) { $.ajax({ type: "GET", //url : "27.html", beforeSend: function(XMLHttpRequest) { $(".rating").html("戦跡読み込み中..."); }, error: function() { $(".rating").html("戦跡の読み込みに失敗しました"); }, success: function(data) { $(".rating").html("計算中..."); data = "<div>" + $(backupdata).find("#wikibody").html() + $(data).find(".senseki").html() + "</div>"; ratingMap = {}; testHistory = {}; var playerMap = $("<table><thead><tr><th>勝者</th><th>敗者</th><th>勝敗</th><th>試合日</th><th>レーティング遷移</th></tr></thead></table>"); var tbody = $("<tbody>").attr("id", "ratings"); $(data).find("table").each(function(elemIndex, elem) { // #region(トグル用@wikiコマンド)のtableを無視する if ($(elem).attr("style") != undefined) { return; } $(elem).find("tr").each(function(rowIndex, row) { var cols = $(row).children("th"); var winner = { name: cols[0] ? $(cols[0]).text() : "", point: cols[2] ? parseInt($(cols[2]).text()) : 0 }; var looser = { name: cols[1] ? $(cols[1]).text() : "", point: cols[3] ? parseInt($(cols[3]).text()) : 0 }; if (!isNaN(winner.point) && winner.name != "" && winner.name != "勝者" && winner.name != "(・∀・)") { ratingMap = calc(ratingMap, winner, looser); } if (winner.name == searchName || looser.name == searchName) { tbody.append($("<tr>") .append($("<th>").append(linkify(winner.name))) .append($("<th>").append(linkify(looser.name))) .append($("<th>").append($(cols[2]).text() + "-" + $(cols[3]).text())) .append($("<th>").append($(cols[4]).text() + "/" + $(cols[5]).text() + "/" + $(cols[6]).text())) .append($("<th>").append(parseInt(ratingMap[searchName].rate))) ); } }); }); searchForm(); $("#test-search-name").val(searchName) playerMap.append(tbody); $(".rating").html(playerMap); $(".rating").prepend("プレイヤー名:" + searchName + "<br>"); //$(".simulated-rating").empty(); } }); } }); }; var reloadButton = $("<button type=\"button\">更新</button>"); reloadButton.click(loadRatingMap); $(".rating").before(reloadButton); loadRatingMap(); }}
#divclass(ao){レーティング個人戦績検索} このページはjavascriptを用いてwikiのページを解析することによってレーティング個人戦績を検索します。 何も表示されない場合、javascriptをONにしてください。 #divclass(simulation){ } ※検索名は完全一致のみ対応 #divclass(rating){ } #js(){{ var ratingMap = {}; var testHistory = {}; var initCharacter = function(map, name) { if (!map[name]) { map[name] = { rate: 1500, matches: 0 }; } return map; }; var calc = function(map, winner, looser) { map = initCharacter(map, winner.name); map = initCharacter(map, looser.name); // 浮動小数点数の計算誤差のため整数計算する winner.c = looser.c = 5; // 収束係数(c) *10 var dc; if (map[winner.name].matches < 4) { dc = (4 - map[winner.name].matches); winner.c += dc; looser.c -= dc; } if (map[looser.name].matches < 4) { dc = (4 - map[looser.name].matches); winner.c -= dc; looser.c += dc; } // 浮動小数点数に戻す winner.c /= 10; looser.c /= 10; if (winner.point != 50) { winner.c = 1 - Math.pow(1 - winner.c, winner.point / 50.0); looser.c = 1 - Math.pow(1 - looser.c, winner.point / 50.0); } // レート変動幅(d) var weight = 20; // 変動幅係数(e) var length = winner.point == 50 ? 1 : 50.0 / winner.point; // (-A + B + d*(n-m)*e) winner.balance = -map[winner.name].rate + map[looser.name].rate + weight * (winner.point - looser.point) * length ; looser.balance = -map[looser.name].rate + map[winner.name].rate + weight * (looser.point - winner.point) * length ; // レート増減分: c * (-A + B + d*(n-m)*e) / 2 winner.charge = winner.c * winner.balance / 2.0; looser.charge = looser.c * looser.balance / 2.0; map[winner.name].rate += winner.charge; map[looser.name].rate += looser.charge; map[winner.name].matches++; map[looser.name].matches++; return map; }; var display = function(map, target) { if (!target) { target = ".rating"; } var displayMap = []; var displayMapIndex = 0; $.each(map, function(name, data) { displayMap[displayMapIndex] = data; displayMap[displayMapIndex++].name = name; }); displayMap.sort(function(a, b) { if (a.rate > b.rate) { return -1; } else if(a.rate < b.rate) { return 1; } return 0; }); var html = "<table><thead><tr><th>HN</th><th>レーティング</th><th>対戦回数</th></tr></thead><tbody id=\"ratings\">"; for(var i = 0; i < displayMap.length; i++) { var data = displayMap[i]; html += "<tr><th>" + data.name + "</th><th>" + parseInt(data.rate) + "</th><th>" + data.matches + "</th></th>" ; } html += "</tbody></table>"; $(target).html(html); }; var searchName = location.search ? decodeURI(location.search).substr(1) : ""; var searchForm = function() { var testForm = $("<form>"), table = $("<table>"), header = $("<thead>"), body = $("<tbody>"), container = $(".simulation") ; container.empty(); header.append($("<tr><th>名前</th><th>&nbsp;</th></tr>")); var row = $("<tr>"); var addCol = function(colBody) { var col = $("<td>"); col.append(colBody); row.append(col); } var addInput = function(id, length) { var input = $("<input>"); input .attr("type", "text") .attr("size", length) .attr("id", id) ; addCol(input); }; addInput("test-search-name", 10); addCol($("<input>").attr("type", "submit").attr("value", "検索")); body .attr("id", "test-rows") .append(row) ; table .append(header) .append(body) ; testForm .attr("id", "test-form") .append(table) .submit(function() { searchName = $("#test-search-name").val(); loadRatingMap(); if ($("#test-clear-inputs").is(':checked')) { $("#test-search-name").val(""); } $("#test-search-name").focus(); return false; }) ; container.append(testForm); }; var ajaxHandler = function() { $("#test-search-name").val(searchName); loadRatingMap(); }; // pjax用 $(function(){ var popped = ('state' in window.history); var initialURL = document.URL; if(window.history && window.history.pushState) { $(window).bind("popstate", function(){ var initialPop = (!popped && document.URL == initialURL); var popped = true; if (!initialPop) { ajaxHandler(); } return false }); } }); var linkify = function(name) { if (searchName == name) { return name; } var url = document.URL.replace(/\?.*$/, "") + "?" + encodeURI(name); return $("<a>") .text(name) .attr("href", url) .click(function() { if (window.history && window.history.pushState) { window.history.pushState("", "", this.href); searchName = name; ajaxHandler(); return false; } }) ; } var loadRatingMap = function() { if (searchName == "") { searchForm(); return; } $.ajax({ type: "GET", url : "24.html", beforeSend: function(XMLHttpRequest) { $(".rating").html("2013年の戦跡読み込み中..."); }, error: function() { $(".rating").html("戦跡の読み込みに失敗しました"); }, success: function(data2013) { $.ajax({ type: "GET", url : "25.html", beforeSend: function(XMLHttpRequest) { $(".rating").html("2014年の戦跡読み込み中..."); }, error: function() { $(".rating").html("戦跡の読み込みに失敗しました"); }, success: function(data2014) { $.ajax({ type: "GET", url : "26.html", beforeSend: function(XMLHttpRequest) { $(".rating").html("2015年前半の戦跡読み込み中..."); }, error: function() { $(".rating").html("戦跡の読み込みに失敗しました"); }, success: function(data2015_1) { $.ajax({ type: "GET", url : "27.html", beforeSend: function(XMLHttpRequest) { $(".rating").html("2015年後半の戦跡読み込み中..."); }, error: function() { $(".rating").html("戦跡の読み込みに失敗しました"); }, success: function(data2015_2) { $.ajax({ type: "GET", url : "29.html", beforeSend: function(XMLHttpRequest) { $(".rating").html("2016年の戦跡読み込み中..."); }, error: function() { $(".rating").html("戦跡の読み込みに失敗しました"); }, success: function(data2016) { $(".rating").html("計算中..."); data2016 = "<div>" + $(data2013).find("#wikibody").html() + $(data2014).find("#wikibody").html() + $(data2015_1).find("#wikibody").html() + $(data2015_2).find("#wikibody").html() + $(data2016).find("#wikibody").html() + "</div>"; ratingMap = {}; testHistory = {}; var playerMap = $("<table><thead><tr><th>勝者</th><th>敗者</th><th>勝敗</th><th>試合日</th><th>レーティング遷移</th></tr></thead></table>"); var tbody = $("<tbody>").attr("id", "ratings"); $(data2016).find("table").each(function(elemIndex, elem) { // #region(トグル用@wikiコマンド)のtableを無視する if ($(elem).attr("style") != undefined) { return; } $(elem).find("tr").each(function(rowIndex, row) { var cols = $(row).children("th"); var winner = { name: cols[0] ? $(cols[0]).text() : "", point: cols[2] ? parseInt($(cols[2]).text()) : 0 }; var looser = { name: cols[1] ? $(cols[1]).text() : "", point: cols[3] ? parseInt($(cols[3]).text()) : 0 }; if (!isNaN(winner.point) && winner.name != "" && winner.name != "勝者" && winner.name != "(・∀・)") { ratingMap = calc(ratingMap, winner, looser); } if (winner.name == searchName || looser.name == searchName) { tbody.append($("<tr>") .append($("<th>").append(linkify(winner.name))) .append($("<th>").append(linkify(looser.name))) .append($("<th>").append($(cols[2]).text() + "-" + $(cols[3]).text())) .append($("<th>").append($(cols[4]).text() + "/" + $(cols[5]).text() + "/" + $(cols[6]).text())) .append($("<th>").append(parseInt(ratingMap[searchName].rate))) ); } }); }); searchForm(); $("#test-search-name").val(searchName) playerMap.append(tbody); $(".rating").html(playerMap); $(".rating").prepend("プレイヤー名:" + searchName + "<br>"); //$(".simulated-rating").empty(); } }); } }); } }); } }); } }); }; var reloadButton = $("<button type=\"button\">更新</button>"); reloadButton.click(loadRatingMap); $(".rating").before(reloadButton); loadRatingMap(); }}

表示オプション

横に並べて表示:
変化行の前後のみ表示: