Skip to content

Instantly share code, notes, and snippets.

@echigoyaechizen
Forked from mikecat/dsmksort2.user.js
Last active August 29, 2015 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save echigoyaechizen/341cfe21a762a3548c6f to your computer and use it in GitHub Desktop.
Save echigoyaechizen/341cfe21a762a3548c6f to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name デスマコロシアムの集計を最短でソート ACT.2改
// @description デスマコロシアムの言語別集計の表を最短ペナルティでソートします。
// @include http://tbpgr.hatenablog.com/entry/*
// @version 1.0.2
// @grant none
// ==/UserScript==
var thA = new Array(6);
thA[0] = 'style="width:40px;text-align:center;">';
thA[1] = 'style="width:120px;text-align:center;">';
thA[2] = 'style="width:40px;text-align:center;">';
thA[3] = 'style="width:80px;text-align:center;">';
thA[4] = 'style="width:80px;text-align:center;">';
thA[5] = 'style="width:80px;text-align:center;">';
// ページがデスマコロシアムの集計報告っぽいかをチェックする
if (document.title.indexOf("デスマコロシアム") >= 0 &&
document.title.indexOf("集計報告") >= 0) {
// 全てのテーブルについて操作を行う
var tables = document.getElementsByTagName("table");
for (var i = 0; i < tables.length; i++) {
var t = tables[i];
// gistのテーブルっぽいかをチェックする
if (t.parentElement !== null && t.parentElement.parentElement !== null &&
t.parentElement.parentElement.getAttribute("class").indexOf("gist") >= 0) {
// gistのテーブルっぽかったら処理をしない
continue;
}
// 言語別の集計っぽいかをチェックする
if (t.innerHTML.indexOf("言語名") >= 0 &&
t.innerHTML.indexOf("最短文字数") >= 0) {
var tableData = new Array();
var tableTitle = new Array();
var htmlData = t.innerHTML;
// 各要素を取得する
htmlData.replace(/<tr>([\s\S]*?)<\/tr>/g, function(all, rowData) {
// データ行
var row = new Array();
rowData.replace(/<td>([\s\S]*?)<\/td>/g, function(all, data) {
row.push(data);
return all;
});
if (row.length > 0) tableData.push(row);
// 見出し行
row = new Array();
rowData.replace(/<th>([\s\S]*?)<\/th>/g, function(all, data) {
row.push(data);
return all;
});
if (row.length > 0) tableTitle = row;
return all;
});
// ポイント列を消して、ペナルティの列を作成
tableTitle.splice(2, 1, "ペナルティ");
for (var j = 0; j < tableData.length; j++) {
var pena = (parseInt(tableData[j][1], 10) - 1) * 10 + (parseInt(tableData[j][3], 10));
tableData[j].splice(2, 1, "" + pena);
}
// ソートを実行する
for (var j = tableData.length - 1; j > 0; j--) {
for (var k = 0; k < j; k++) {
if (parseInt(tableData[k][2], 10) > parseInt(tableData[k + 1][2], 10)) {
var temp = tableData[k];
tableData[k] = tableData[k + 1];
tableData[k + 1] = temp;
}
}
}
// 情報を追加する
tableTitle.splice(0, 0, "順位");
var ninsuSum = 0;
var tmpPna = 0;
var tmpJun = 0;
for (var j = 0; j < tableData.length; j++) {
var ninsu = parseInt(tableData[j][1], 10);
if (!isNaN(ninsu)) ninsuSum += ninsu;
tmpJun = ninsuSum - ninsu + 1;
if (tmpPna == tableData[j][2]) tmpJun = tableData[j-1][0];
tmpPna = tableData[j][2];
tableData[j].splice(0, 0, "" + tmpJun);
}
// テーブルを構築する
var html = "<tr>";
for (var j = 0; j < tableTitle.length; j++) {
html += "<th " + thA[j] + tableTitle[j] + "</th>";
}
html += "</tr>";
for (var j = 0; j < tableData.length; j++) {
html += "<tr>";
for (var k = 0; k < tableData[j].length; k++) {
html += '<td ' + thA[k] + tableData[j][k] + "</td>";
}
html += "</tr>";
}
t.innerHTML = html;
}
}
}
@echigoyaechizen
Copy link
Author

デスマコロシアムの言語別集計の表を最短ペナルティでソートします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment