洛谷内卷监视工具(升级版)

v0.1

upsdate on 2023.11.07

较原版内卷监视工具,增加了一下功能:

  • 计分板(宏观掌控他人的卷题数量和难度分布)
  • 多次连续AC相同题目去重

可能会不定时更新

有什么建议可以提出

code for v0.1
var userlist = 
["ricky_lin","Query_Failed",
"The_Last_Candy",
"Jeefy",
"Rairn",
"hfjh",
"fsfdgdg",
"aish"];<!--观察成员列表-->
var pages = 1;  <!-- 初始检查做题记录页数,建议设置为 1-2 -->
var cd = 10000; <!-- 自动检查每个人时间间隔,建议保持为 10000,以免 GG-->
var a = [[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]];<!--各个难度的做题数量 有几个人就要复制几个[0,0,0,0,0,0,0,0]-->
var pre=[0,0,0,0,0,0,0,0];<!--上一个做的题 0的数量和人的数量要相等-->
var numcnt=[0,0,0,0,0,0,0,0];<!--做题数量统计 0的数量和人的数量要相等-->
var colors=['rgb(191, 191, 191)','rgb(254, 76, 97)','rgb(243, 156, 17)','rgb(255, 193, 22)','rgb(82, 196, 26)','rgb(52, 152, 219)','rgb(157, 61, 207)','rgb(14, 29, 105)'];
var name="灰红橙黄绿蓝紫黑";
var lst=Array();
var cnt=0;
function onSearch(obj)
{
    var storeId=document.getElementById('store');
    var gradeId=document.getElementByld('grade');
    var rowsLength=storeId.rows.length;
    var key=document.getElementById('key').value;
    for(var i=1;i < rowsLength;i++)
    {
        var searchText=storeId.rows[i].cells[0].innerHTML;
        if(key=="*"||searchText.match(key))
            storeId.rows[i].style.display='';
        else
            storeId.rows[i].style.display='none';
    }
};
str='<div><select onchange="onSearch()" name="key" id="key"><option value="*">*</option>';
for(var i=0;i < userlist.length;i++)
    str+='<option value="'+userlist[i]+'">'+userlist[i]+'</option>';
str+='</select></div><table id="grade" style="white-space: nowrap;"><thead><tr><th>用户</th><th>题目数量</th>'
for(var i=0; i < 8;i++)
    str+= '<th>' +"<a style='color:"+colors[i]+"'>"+ name[i] + '</a></th>';
str+='</tr></thead><tbody>';
str+='</tbody></table><table id="store" style="white-space: nowrap;"><tr><th>用户</th><th>题号</th><th>标题</th></tr></table>';
document.body.innerHTML = "<h1 style='text-align:center;color:red;font-family:Microsoft Yahei'>内卷监视工具(升级版)</h1>";
document.body.innerHTML += "<b style='text-align:center;'>author:<a href='https://www.luogu.com.cn/user/78206'>ricky_lin</a></b>";
document.body.innerHTML += "<b style='text-align:center;font-family:FangSong'>运筹首页之中,偷袭千里之外&#128517;</b><hr>" + str;
<!-- Output Emoji & Option -->
function PARSE(First=false)
{
    cnt=(cnt+1)%userlist.length;
    var user=userlist[cnt];
    var Pagenum=1;if(First)Pagenum=pages;
    for(;Pagenum>0;Pagenum--)
    {
        var httpRequest=new XMLHttpRequest();
        httpRequest.open('GET','https://www.luogu.com.cn/record/list?user='+user+'&status=12&page='+Pagenum,false);
        httpRequest.send();
        if(httpRequest.readyState==4&&httpRequest.status==200)
        {
            var content=httpRequest.responseText;
            var patten=/decodeURIComponent\(".*?"\)/;
            content=patten.exec(content)[0];
            content=content.substr(20,content.length-22);
            content=JSON.parse(decodeURIComponent(content));
            var prob,col,pid,title;
            for(var i=Math.min(content.currentData.records.result.length-1,19);i>=0;i--)
                if(content.currentData.records.result[i].status==12&&content.currentData.records.result[i].id>lst[cnt])
                {
                    prob=content.currentData.records.result[i].problem;
                    col=colors[prob.difficulty];
                    pid=prob.pid;
                    title=prob.title;
                    if(!First && pid != pre[cnt]){
                        document.getElementById('store').childNodes[0].innerHTML
                        +='<tr><td>'+user+'</td><td>'+pid+'</td><td>'+
                            "<a style='color:"+col+"' href='https://www.luogu.com.cn/problem/"+pid+"' target='_blank'>"
                        +title+"</a>"+'</td></tr>';
                        alert(user+" 刚刚卷了"+name[prob.difficulty]+"题 "+pid+" "+title);
                        ++numcnt[cnt];
                        ++a[cnt][prob.difficulty];
                    }
                    pre[cnt]=pid;
                    lst[cnt]=content.currentData.records.result[i].id
                }
        }
    }
    str = "<thead><tr><th>用户</th><th>题目数量</th>";
    for(var i=0; i < 8;i++)
        str+= '<th>' +"<a style='color:"+colors[i]+"'>"+ name[i] + '</a></th>';
    str+='</tr></thead><tbody>';
    for(var i=0;i < userlist.length;i++){
        str+='<tr><td>'+userlist[i]+'</td><td>'+numcnt[i]+'</td>';
        for(var j=0; j < 8;j++){
               str+='<td>'+a[i][j]+'</td>';
        }
        str+='</tr>';
    }
    document.getElementById('grade').childNodes[0].innerHTML=str;
}
for(var i=0;i < userlist.length;i++) lst[i]=0;
for(var i=0;i < userlist.length;i++)PARSE(true);
window.setInterval(PARSE,cd);

v0.2

update on 2023.12.05

更新了以下内容:

  • 解决了只能从脚本开始后记录卷题情况的问题,将其拓展到了脚本运行的当天开始
  • 选择框可以控制计分板了
code for v0.2
var userlist = 
["ricky_lin","Smallbasic",
"The_Last_Candy",
"Jeefy",
"Rairn",
"hfjh",
"fsfdgdg",
"aish"];<!--观察成员列表-->
var lstt = 12;
var opentime = Math.round(new Date().getTime()/1000);
var tbegin = Math.round(new Date().getTime()/1000) + (8 * 3600);
tbegin -= tbegin % 86400;
var pages = 1;  <!-- 初始检查做题记录页数,建议设置为 1-2 -->
var cd = 10000; <!-- 自动检查每个人时间间隔,建议保持为 10000,以免 GG-->
var a = [[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]];<!--各个难度的做题数量 有几个人就要复制几个[0,0,0,0,0,0,0,0]-->
var pre=[0,0,0,0,0,0,0,0];<!--上一个做的题 0的数量和人的数量要相等-->
var numcnt=[0,0,0,0,0,0,0,0];<!--做题数量统计 0的数量和人的数量要相等-->
var colors=['rgb(191, 191, 191)','rgb(254, 76, 97)','rgb(243, 156, 17)','rgb(255, 193, 22)','rgb(82, 196, 26)','rgb(52, 152, 219)','rgb(157, 61, 207)','rgb(14, 29, 105)'];
var name="灰红橙黄绿蓝紫黑";
var lst=Array();
var cnt=0;
function onSearch(obj)
{
    var gradeId=document.getElementById('grade');
    var storeId=document.getElementById('store');
    var rowsLength=storeId.rows.length;
    var key=document.getElementById('key').value;
    for(var i=1;i < rowsLength;i++)
    {
        var searchText=storeId.rows[i].cells[0].innerHTML;
        if(key=="*"||searchText.match(key)){
            storeId.rows[i].style.display='';
        }
        else{
            storeId.rows[i].style.display='none';
        }
    }
    rowsLength=gradeId.rows.length;
    key=document.getElementById('key').value;
    for(var i=1;i < rowsLength;i++)
    {
        var searchText=gradeId.rows[i].cells[0].innerHTML;
        if(key=="*"||searchText.match(key)){
            gradeId.rows[i].style.display='';
        }
        else{
            gradeId.rows[i].style.display='none';
        }
    }
};
str='<div><select onchange="onSearch()" name="key" id="key"><option value="*">*</option>';
for(var i=0;i < userlist.length;i++)
    str+='<option value="'+userlist[i]+'">'+userlist[i]+'</option>';
str+='</select></div><table id="grade" style="white-space: nowrap;"><thead><tr><th>用户</th><th>题目数量</th>'
for(var i=0; i < 8;i++)
    str+= '<th>' +"<a style='color:"+colors[i]+"'>"+ name[i] + '</a></th>';
str+='</tr></thead><tbody>';
str+='</tbody></table><table id="store" style="white-space: nowrap;"><tr><th>用户</th><th>题号</th><th>标题</th></tr></table>';
document.body.innerHTML = "<h1 style='text-align:center;color:red;font-family:Microsoft Yahei'>内卷监视工具(升级版)</h1>";
document.body.innerHTML += "<b style='text-align:center;'>author:<a href='https://www.luogu.com.cn/user/78206'>ricky_lin</a></b>";
document.body.innerHTML += "<b style='text-align:center;font-family:FangSong'>运筹首页之中,偷袭千里之外&#128517;</b><hr>" + str;
<!-- Output Emoji & Option -->
function PARSE(First=false)
{
    cnt=(cnt+1)%userlist.length;
    var user=userlist[cnt];
    var Pagenum=1;
    lstt = tbegin;
    for(;lstt >= tbegin;Pagenum++)
    {
        var httpRequest=new XMLHttpRequest();
        httpRequest.open('GET','https://www.luogu.com.cn/record/list?user='+user+'&status=12&page='+Pagenum,false);
        httpRequest.send();
        if(httpRequest.readyState==4&&httpRequest.status==200)
        {
            var content=httpRequest.responseText;
            var patten=/decodeURIComponent\(".*?"\)/;
            content=patten.exec(content)[0];
            content=content.substr(20,content.length-22);
            content=JSON.parse(decodeURIComponent(content));
            var prob,col,pid,title;
            for(var i=Math.min(content.currentData.records.result.length-1,19);i>=0;i--){
                lstt = content.currentData.records.result[i].submitTime;
                if(content.currentData.records.result[i].status==12&&content.currentData.records.result[i].id>lst[cnt])
                {
                    prob=content.currentData.records.result[i].problem;
                    col=colors[prob.difficulty];
                    pid=prob.pid;
                    title=prob.title;
                    if(tbegin <= lstt && pid != pre[cnt]){
                        document.getElementById('store').childNodes[0].innerHTML
                        +='<tr><td>'+user+'</td><td>'+pid+'</td><td>'+
                            "<a style='color:"+col+"' href='https://www.luogu.com.cn/problem/"+pid+"' target='_blank'>"
                        +title+"</a>"+'</td></tr>';
                        if(lstt >= opentime) alert(user+" 刚刚卷了"+name[prob.difficulty]+"题 "+pid+" "+title);
                        ++numcnt[cnt];
                        ++a[cnt][prob.difficulty];
                    }
                    pre[cnt]=pid;
                    lst[cnt]=content.currentData.records.result[i].id
                }
            }
        }
    }
    str = "<thead><tr><th>用户</th><th>题目数量</th>";
    for(var i=0; i < 8;i++)
        str+= '<th>' +"<a style='color:"+colors[i]+"'>"+ name[i] + '</a></th>';
    str+='</tr></thead><tbody>';
    for(var i=0;i < userlist.length;i++){
        str+='<tr><td>'+userlist[i]+'</td><td>'+numcnt[i]+'</td>';
        for(var j=0; j < 8;j++){
               str+='<td>'+a[i][j]+'</td>';
        }
        str+='</tr>';
    }
    document.getElementById('grade').childNodes[0].innerHTML=str;
}
for(var i=0;i < userlist.length;i++) lst[i]=0;
for(var i=0;i < userlist.length;i++)PARSE(true);
window.setInterval(PARSE,cd);
posted @ 2023-11-07 22:04  ricky_lin  阅读(506)  评论(0编辑  收藏  举报