背景
在发现被老板CPU之后,大家想做的基本上都是摸鱼,像我这种没什么手法的人不可能摸鱼打MOBA游戏,所以只能选择数独这种对时间要求不怎么急促的小游戏。然而,有时候搞半天才发现从一开始就错了,这让我很苦恼,看来有必要对这一摸鱼行动进行再次摸鱼。
平台
偶然发现的在线数独页游[在线数独 (sudoku-cn.com)]
方案
浏览器安装油猴插件,并新建一个油猴脚本,其内容如下:
// ==UserScript==
// @name 右键自动解答数独
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://sudoku-cn.com/
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==
(function() {
'use strict';
let board = [];
let over = false;
function getQuestion() {
let s = [];
for (let i = 0; i < 9; i++) {
s.push([]);
for (let j = 0; j < 9; j++) {
let div = document.querySelector("#vc_" + j + "_" + i);
if (div.innerHTML.trim().length != 0 && div.className == "r1") {
s[i].push(div.innerHTML.trim());
} else {
s[i].push("_");
}
}
}
return s;
}
function dfs(index) {
if (over) {
return;
}
let i = Math.floor(index / 9);
let j = index % 9;
if (index >= 81) {
over = true;
return;
}
if (board[i][j] == "_") {
for (let c = '1'; c <= '9'; c++) {
let hang = false,
lie = false,
gong = false;
for (let u = i, v = 0; v < 9; v++) {
if (board[u][v] == c) {
hang = true;
break;
}
}
if (hang) {
continue;
}
for (let u = 0, v = j; u < 9; u++) {
if (board[u][v] == c) {
lie = true;
break;
}
}
if (lie) {
continue;
}
for (let u = Math.floor(i / 3) * 3, v = Math.floor(j / 3) * 3; u < Math.floor(i / 3) * 3 + 3 && v < Math
.floor(j / 3) * 3 + 3; u++, v++) {
if (board[u][v] == c) {
gong = true;
break;
}
}
if (gong) {
continue;
}
board[i][j] = c;
dfs(index + 1);
if (!over) {
board[i][j] = '_';
} else {
break;
}
}
} else {
dfs(index + 1);
}
}
function setAnswer() {
let index = 0;
for (let i = 0; i < 9; i++) {
for (let j = 0; j < 9; j++) {
let div = document.querySelector("#vc_" + j + "_" + i);
div.innerHTML = board[i][j];
}
}
}
document.oncontextmenu = (e) => {
e.preventDefault();
over = false;
board = getQuestion();
dfs(0);
setAnswer();
}
})();
如代码所示,我把鼠标右键默认事件取消了,取而代之的是右键单击时自动求解该题目,并填写答案进去。
测试
直接高级+难度的题目
点击鼠标右键直接求解
全是绿色的,那就没问题了。
至此,完成了摸鱼也摸鱼的目标。