有比较闲的同学帮忙吗
@不刷题的5ab orz
在冬日绘版界面按下F12,选中console选项卡
复制粘贴下面的代码 按回车 plzplz
(function(initConfig){
'use strict';
if(typeof initConfig==='undefined'){
initConfig={};
}
Array.prototype.flat=Array.prototype.flat||function(){var arr = [];this.forEach((item,idx)=>{if(Array.isArray(item)){arr=arr.concat(item.flat())}else{arr.push(item)}});return arr}
clearTimeout();
clearInterval();
var colorDivs=document.getElementsByClassName('paleitem');
for(let i=0;i<32;i++){
let d=colorDivs[i];
d.title=Number(d.dataset.cid).toString(32);
}
const defaultBackGround = 2;
var mine = Array(W);
for (var i = 0; i < W; ++i) {
mine[i] = Array(H);
for (var j = 0; j < H; ++j) mine[i][j] = defaultBackGround;
}
function colorStyle(color){
if(color===colorlist[1])return 'color:black';
else return 'color:'+color;
}
const colornames = '黑 白 灰 深灰 亮粉 粉 亮橙 亮红 红 紫红 深粉 暗粉 紫 深蓝 蓝青 暗青 蓝 青 亮青 淡蓝 深绿 绿 黄绿 浅绿 暗白 淡橙 黄 浅橙 橙 橙红 红棕 棕'.split(' ');
var colorname = {};
var colorid = {};
for (var i = 0; i < colornames.length; ++i) {
colorname[i] = colornames[i] + '色';
colorname[colorlist[i]] = colorname[i];
colorid[colorlist[i]] = i;
}
$('#mycanvas').unbind("click");
$('#mycanvas').bind("click",function() {
var x = parseInt(event.offsetX / scale);
var y = parseInt(event.offsetY / scale);
console.info('定点: ('+x+','+y+'),颜色:%c'+colorname[colorlist[mine[x][y]]],colorStyle(colorlist[mine[x][y]]));
});
var calcTime=0,dx,dy;
var lmap,lw,lh;
var limitRate;
function setLMap(map){
lmap=map;
if(!inited)return;
lh=lmap.length;
lw=Math.max(...lmap.map(str=>str.length));
var count=-50;
lmap.map(function(str){
[...str].map(function(ch){
if(ch===' '){
count++;
}
})
});
limitRate=1-count/(lw*lh);
if(config.logLevel<=1)console.log(
'已设置图形为\n'
+lmap.map(arr=>([...arr].map(ch=>'%c'+ch+' ').join(''))).join('\n'),
...lmap.map(arr=>([...arr].map(ch=>`font-size:6px;background:`+colorlist[getColor(ch)]))).flat()
);
calcBest();
return config;
}
function getColor(ch){
if(ch==='@')return parseInt(config.foreColor,32);
else if(ch===' ')return defaultBackGround;
else return parseInt(ch,32);
}
var important=[];
for (var i = 0; i < W; ++i) {
important[i] = [];
for (var j = 0; j < H; ++j)important[i][j]=false;
}
var pfs = [];
for (var i = 0; i < W; ++i) pfs[i] = [];
function calcBest() {
var cPos=config.pos;
if(cPos.x!==-1&&cPos.y!==-1&&config.lockPos){
if(config.logLevel<=0)console.log('绘制区域锁定在('+cPos.x+','+cPos.y+')');
dx=cPos.x;
dy=cPos.y;
return;
}
if(config.logLevel<=0)console.log('寻找最优绘制区域');
calcTime=config.calcCooldown;
if(lw<=0||lh<=0){
cPos.x=cPos.y=dx=dy=-1;
return;
}
let pt = [];
for (var i = 0; i < lmap.length; ++i) for (var j = 0; j < lmap[i].length; ++j) {
var c=getColor(lmap[i].charAt(j));
if(c!==defaultBackGround)pt.push({
dx: j,
dy: i,
color:c
})
}
function pfv(x, y) {
return x >= 0 && y >= 0 ? pfs[x][y] : 0
}
for (var i = 0; i < W; ++i) for (var j = 0; j < H; ++j) {
pfs[i][j] = pfv(i, j - 1) + pfv(i - 1, j) - pfv(i - 1, j - 1) + (mine[i][j] !== defaultBackGround ? 1 : 0)
}
var gl = [];
for (let i = 0; i < W - lw + 1; ++i){
for (let j = 0; j < H - lh + 1; ++j) {
let nowp = {
x: i,
y: j
};
nowp.d = pfs[i + lw - 1][j + lh - 1] - (pfv(i + lw - 1, j - 1) + pfv(i - 1, j + lh - 1) - pfv(i - 1, j - 1));
if (nowp.d > lw * lh * limitRate&&!important[i][j]) continue;
for (let k in pt) {
if(k=='flat')continue;
// if(isNaN(j+pt[k].dy)){
// console.debug(i,j,pt,k,pt[k],nowp);
// }
var nowb = mine[i + pt[k].dx][j + pt[k].dy];
if (nowb === defaultBackGround)++nowp.d;
if (nowb === pt[k].color)--nowp.d
}
gl.push(nowp)
}
}
function pcmp(a, b) {
return a.d - b.d
}
gl.sort(pcmp);
var fixed = 0;
while (fixed<gl.length&&gl[fixed].d === 0)++fixed;
if(fixed>=gl.length||fixed>=config.maxObject){
cPos.x=cPos.y=dx=dy=-1;
return;
}
function cross(a1, a2) {
return (a1.x - lw + 1 <= a2.x && a2.x <= a1.x + lw - 1) && (a1.y - lh + 1 <= a2.y && a2.y <= a1.y + lh - 1)
}
function good(id) {
for (var i = 0; i < fixed; ++i) if (cross(gl[i], gl[id])) return false;
return true;
}
var nowgp = fixed;
while (!good(nowgp)){
if(++nowgp>=gl.length){
cPos.x=cPos.y=dx=dy=-1;
return;
}
}
cPos.x = dx = gl[nowgp].x;
cPos.y = dy = gl[nowgp].y;
important[dx][dy]=true;
}
update=function(y, x, color) {//覆盖洛谷脚本同名函数
if(mine[x][y] === colorid[color])return;
mine[x][y] = colorid[color];
if (config.logUpdate) console.log(`坐标(`+x+`,`+y+`)被更新为%c`+colorname[color],colorStyle(color));
if (config.showUpdate) {
var c = document.getElementById("mycanvas");
var ctx = c.getContext("2d");
ctx.save();
ctx.fillStyle = color;
ctx.fillRect(x * 5, y * 5, 5, 5)
}
}
var freshTime=0;
function freshPrintBoard(callback) {
if (config.doRefreshing&&freshTime<=0) {
try{
$.ajax({
type:"GET",
url:"/paintBoard/board",
success(resp) {
if(config.logLevel<=0)console.log('刷新界面完成');
freshTime = config.refreshCooldown;
resp.split('\n').map(function(colorStr, x) {
colorStr.split("").map(function(color, y) {
update(y, x, colorlist[parseInt(color, 32)])
})
});
callback();
},
error(...resp){
if(config.logLevel<=2)console.warn('刷新界面时出现错误,返回',resp);
wait(function() {
freshPrintBoard(callback)
},config.errorDelay);
}
});
}catch(e){
return;
}
} else {
freshTime--;
setTimeout(callback);
}
}
function make(dx, dy) {
if(dx===-1&&dy===-1)return [];
var el = [];
for (var i = 0; i <= lmap.length - 1; ++i) for (var j = 0; j <= lmap[i].length - 1; ++j) el.push({
x: j + dx,
y: i + dy,
color: getColor(lmap[i].charAt(j))
});
var l = el.length;
var midx = 0;
var midy = 0;
for (var i = 0; i <l; ++i) {
midx += el[i].x;
midy += el[i].y
}
midx /= l;
midy /= l;
var mid = {
x: midx,
y: midy
};
function dis(a, b) {
return Math.
max(Math.abs(a.x - b.x) / lw, Math.abs(a.y - b.y) / lh)
}
function value(e){
var res=0,fc=parseInt(config.foreColor,32);
if(e.color==fc)res+=1000000;
if(mine[e.x][e.y]==fc)res+=1000000;
let [a,b]=config.ord==='col'?[1e4,100]:[100,1e4];
if(e.color!==defaultBackGround)res-=e.x/W*a+e.y/H*b-1000000;
else res-=dis(e,mid)*1;
return res;
}
function cmp(ea, eb) {
return value(eb)-value(ea);
}
el.sort(cmp);
return el;
}
function wait(callback,delay=1000){
const time=$('#timeleft').text();
if(time==='冷却时间到'){
if(config.logLevel<=0)console.log('冷却时间到');
setTimeout(callback,delay);
}else{
var arr=time.split(':').map(Number);
var sec=arr.reduce((pre,now)=>pre*60+now) + 1;
if(config.logLevel<=0)console.log(`进入等待,剩余`+sec+`秒`);
setTimeout(function(){
wait(callback,delay);
},sec*1000);
}
}
function doit(x, y, c,callback) {
var nowcolor = c;
update(y, x, colorlist[nowcolor]);
$.ajax({
type:"POST",
url:"/paintBoard/paint",
data:{
x,
y,
color: nowcolor
},
success(resp) {
if(resp.status!==200){
if(config.logLevel<=2)console.warn(`在(`+x+`,`+y+`)绘制%c`+colorname[colorlist[c]]+`时出现错误`,colorStyle(colorlist[c])+'时出现错误,返回',resp);
wait(function(){
doit(x,y,c,callback);
},config.errorDelay);
}else{
if(config.logLevel<=1)console.log(`在(`+x+`,`+y+`)绘制了%c`+colorname[colorlist[c]],colorStyle(colorlist[c]));
var lasttime = (new Date()) / 1000;
getCountDown(lasttime + timelimit);
$('#timeleft').html(`00:00:`+timelimit);
wait(callback,config.delay);
if(calcTime<=0){
calcBest();
}else{
calcTime--;
}
}
},
error(...resp){
if(config.logLevel<=2)console.warn(`在(`+x+`,`+y+`)绘制%c`+colorname[colorlist[c]],colorStyle(colorlist[c])+'时出现错误,返回',resp);
wait(function(){
doit(x,y,c,callback);
},config.errorDelay);
}
});
}
function process() {
freshPrintBoard(function() {
var el=make(dx, dy);
for(var i=0;i<el.length;i++){
var e = el[i];
if(e.color !== mine[e.x][e.y]){
doit(e.x, e.y, e.color, process);
return;
}
}
if(config.logLevel<=1)console.log('未找到需绘制的点');
wait(process,config.lazyDelay);
calcBest();
return;
});
}
var inited=false;
function setCfg(newCfg){
for(var key in newCfg){
config[key]=newCfg[key];
}
config.setCfg=setCfg;
return config;
}
//默认配置
var config={
doRefreshing:true,
refreshCooldown:0,
logUpdate:false,
showUpdate:true,
calcCooldown:2,
maxObject:1,
delay:1000,
errorDelay:5000,
lazyDelay:30000,
logLevel:0,
foreColor:'g',
lockPos:false,
pos:{x:-666,y:-666},
ord:'col',
$lmap:[
" @@@@@ @@@ @@@@ @@@ @ @ ",
" @ @ @ @ @ @ @ @ @ ",
" @@@@@ @@@@@ @@@@ @@@@@ @@ ",
" @ @ @ @ @ @ @ @ @@ ",
" @@@@@ @ @ @@@@ @ @ @ @@ ",
/*
" ",
" rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr ",
" riii111iiiiiiiiiiiiiiiiiiiii111iiiiiii111111iiiiiiiiiiiiii1iiiiiiii1r ",
" ri@i111i@@@@@i@@@@@i@@@@@i@i111i@@@@@i111111i@i@ii@@@@@i@iii@ii@@@i1r ",
" ri@i111iii@iiiii@iiiii@iii@i111i@iiiii11111ii@i@iiii@iii@@ii@i@iiiiir ",
" ri@i11111i@i111i@i111i@i1i@i111i@@@@@i11111i@i@i@i1i@i1i@i@i@i@i@@@ir ",
" ri@iiiiiii@iii1i@i111i@i1i@iiiii@iiiiiiiiiii@i@i@iii@iii@ii@@i@iii@ir ",
" ri@@@@@i@@@@@i1i@i111i@i1i@@@@@i@@@@@i@@@@@i@i@i@i@@@@@i@iii@ii@@@iir ",
" riiiiiiiiiiiii1iii111iii1iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii1iiiiiiii1r ",
" rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr ",
" "
*/
],
set lmap(x){
this.$lmap=x;
setLMap(x);
},
get lmap(){
return this.$lmap;
}
};
setCfg(initConfig);
freshPrintBoard(function(){
inited=true;
setLMap(config.lmap);
setTimeout(function(){
wait(process,config.delay);
},config.delay);
})
console.clear();
if(config.logLevel<=2)console.log('加载完成,准备执行……');
return config;
}())