摸鱼也摸鱼之点灯游戏自动求解

游戏

变色方块 世上最难智力游戏 (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),后面有可能会变得很慢,适当游戏,主要是学习算法以及搭配浏览器编写脚本,不要本末倒置。

猜你喜欢

转载自blog.csdn.net/qq_36694133/article/details/133084229
今日推荐