-
-
Save echigoyaechizen/341cfe21a762a3548c6f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
デスマコロシアムの言語別集計の表を最短ペナルティでソートします。