彩色AC

BSOJ和洛谷AC的都是彩色!

目前為 2024-02-22 提交的版本,檢視 最新版本

// ==UserScript==
// @name     彩色AC
// @description BSOJ和洛谷AC的都是彩色!
// @license SATA
// @version  3.0
// @match    *://www.luogu.com.cn/*
// @match    *://oj.bashu.com.cn/*
// @namespace https://greasyfork.org/users/1265383
// ==/UserScript==
let c=Math.round(Math.random()*360);
function hsvToRgb(x) {
    var h = x, s = 100, v =100;
    s = s / 100;
    v = v / 100;
    var r = 0, g = 0, b = 0;
    var i = parseInt((h / 60) % 6);
    var f = h / 60 - i;
    var p = v * (1 - s);
    var q = v * (1 - f * s);
    var t = v * (1 - (1 - f) * s);
    switch (i) {
        case 0:
            r = v; g = t; b = p;
            break;
        case 1:
            r = q; g = v; b = p;
            break;
        case 2:
            r = p; g = v; b = t;
            break;
        case 3:
            r = p; g = q; b = v;
            break;
        case 4:
            r = t; g = p; b = v;
            break;
        case 5:
            r = v; g = p; b = q;
            break;
        default:
            break;
    }
    r = parseInt(r * 255.0)
    g = parseInt(g * 255.0)
    b = parseInt(b * 255.0)
    return [r, g, b];
}
var front = [];
var back = [];
function get(now){
    if(now.innerHTML=='AC'&&now.className=="status"){
        if(back.includes(now.parentNode)==false){
            back.push(now.parentNode);
        }
    }
    if(now.innerHTML=='Correct'){
        if(back.includes(now.parentNode)==false){
            back.push(now.parentNode);
        }
    }
    if(now.innerHTML=='\n        Accepted\n      '){
        if(front.includes(now)==false){
            front.push(now);
            if(now.parentNode.parentNode.parentNode.children.length>=3){
                if(front.includes(now.parentNode.parentNode.parentNode.children[2].children[1].children[0].children[0])==false){
                    front.push(now.parentNode.parentNode.parentNode.children[2].children[1].children[0].children[0]);
                }
            }
        }
    }
    if(now.innerHTML=='\n  Accepted\n'){
        if(back.includes(now)==false){
            back.push(now);
            if(now.parentNode.children.length>=2){
                if(front.includes(now.parentNode.children[1])==false){
                    front.push(now.parentNode.children[1]);
                }
            }
        }
    }
    if(now.innerHTML=='<i class="icon-ok icon-white"></i> Congratulation !'){
       if(back.includes(now)==false){
            back.push(now);
        }
    }
    if(now.innerHTML=='Accepted'&&now.className=="label label-success"){
       if(back.includes(now)==false){
            back.push(now);
        }
    }
    if(now.innerHTML=='\n  AC\n'){
       if(back.includes(now)==false){
            back.push(now);
        }
    }
    var x=now.children;
    for(var i=0;i<now.children.length;i++){
        get(x[i]);
    }
}
function rep(){
    let xxx=hsvToRgb(c);
    for(let i=0;i<front.length;i++){
        front[i].style.color='rgb('+xxx[0]+','+xxx[1]+','+xxx[2]+')';
    }
    for(let i=0;i<back.length;i++){
        back[i].style.background='rgb('+xxx[0]+','+xxx[1]+','+xxx[2]+')';
    }
}
var cnt=99;
(() => {
let a = setInterval(() =>{
    c++;
    if(c==360){
        c=0;
    }
    cnt++;
    if(cnt==100){
        get(document);
        cnt=0;
    }
    rep();
},5)
})();