游戏
变色方块 世上最难智力游戏 (yanhaijing.com)
脚本
新建文件夹,命名为Inverter
在文件夹下新建inverter.js文件,内容如下
"use strict";function getA() {let a = [];let level = parseInt(document.querySelector("#cur-level").innerHTML);for (let i = 0; i < level; i++) {a.push([]);for (let j = 0; j < level; j++) {a[i].push(0);}}return a;
}function solve() {let level = parseInt(document.querySelector("#cur-level").innerHTML);let screen = document.querySelector("#screen");let max = Math.floor(Math.pow(2, level));for (let num = 0; num < max; num++) {let a = getA();let f = getA();let s = num.toString(2);while (s.length < level) {s = "0" + s;}for (let i = 0; i < level; i++) {if (s[i] == '1') {a[0][i] = 1 - a[0][i];f[0][i] = 1;if (i > 0) {a[0][i - 1] = 1 - a[0][i - 1];}if (i + 1 < level) {a[0][i + 1] = 1 - a[0][i + 1];}if (1 < level) {a[1][i] = 1 - a[1][i];}}}for (let i = 0; i < level - 1; i++) {for (let j = 0; j < level; j++) {if (a[i][j] == 0) {f[i + 1][j] = 1;a[i][j] = 1 - a[i][j];a[i + 1][j] = 1 - a[i + 1][j];if (j > 0) {a[i + 1][j - 1] = 1 - a[i + 1][j - 1];}if (j + 1 < level) {a[i + 1][j + 1] = 1 - a[i + 1][j + 1];}if (i + 2 < level) {a[i + 2][j] = 1 - a[i + 2][j];}}}}let c = 0;for (let i = level - 1, j = 0; j < level; j++) {c += a[i][j];}if (c == level) {console.log(a);console.log();console.log(f)console.log();console.log(s);let divs=document.querySelectorAll(".square ");for(let i=0;i<level;i++){for(let j=0;j<level;j++){if(f[i][j]==1){let index=i*level+j;divs[index].click();}}}break;}}
}document.oncontextmenu = (e) => {e.preventDefault();solve();
}
再建一个manifest.json文件,内容如下
{"name": "inverter","version": "1.0","description": "单击鼠标右键自动求解点灯","manifest_version": 2,"content_scripts": [{"matches": ["http://yanhaijing.com/inverter/"],"js": ["inverter.js"]}]
}
部署
因为我用的是Edge浏览器,就以它为例,打开它的扩展
使用键盘上的Win键+右方向键,将这个画面缩到右边,将脚本文件夹缩到左边
使用鼠标将脚本文件夹Inverter拖到扩展区中,即可添加完毕
测试
打开我们的游戏主页
鼠标右键单击,即可自动帮我们解答,进入下一关。
注意
由于随着N的增长,算法复杂度为O(2^N),后面有可能会变得很慢,适当游戏,主要是学习算法以及搭配浏览器编写脚本,不要本末倒置。