洛谷内卷监视工具(升级版)
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'>运筹首页之中,偷袭千里之外😅</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'>运筹首页之中,偷袭千里之外😅</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);
本文来自博客园,作者:ricky_lin,转载请注明原文链接:https://www.cnblogs.com/rickylin/p/tools_monitor-for-luogu.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步