在发现被老板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;
-
- let hang=[];
- let lie=[];
- let mid=[];
-
-
- function getQuestion() {
- hang=[];
- lie=[];
- mid=[];
- for(let i=0;i<9;i++){
- hang.push([false,false,false,false,false,false,false,false,false]);
- lie.push([false,false,false,false,false,false,false,false,false]);
- mid.push([false,false,false,false,false,false,false,false,false]);
- }
-
- board=[];
- let str="";
- for (let i = 0; i < 9; i++) {
-
- board.push([]);
- for (let j = 0; j < 9; j++) {
- let div = document.querySelector("#vc_" + j + "_" + i);
- if (div.innerHTML.trim().length != 0&&div.className=="r1") {
- board[i].push(div.innerHTML.trim());
- str+=div.innerHTML.trim();
- hang[i][board[i][j].charCodeAt(0)-49]=true;
- lie[j][board[i][j].charCodeAt(0)-49]=true;
- mid[Math.floor(i/3)*3+Math.floor(j/3)][board[i][j].charCodeAt(0)-49]=true;
- } else {
- str+="_";
- board[i].push("_");
- }
- }
- }
- /* console.log("源:",str); */
- }
-
- function dfs(i,j) {
- if (over)
- {
- return;
- }
- if (i >= 9 || j >= 9)
- {
- over = true;
- return;
- }
-
- if (board[i][j] != '_')
- {
- if (j == 9 - 1)
- {
- dfs(i + 1, 0);
- }
- else
- {
- dfs(i, j + 1);
- }
- return;
- }
-
- for(let number = 1; number <= 9; number++)
- {
- if (hang[i][number - 1] || lie[j][ number - 1] || mid[Math.floor(i / 3) * 3 +Math.floor( j / 3)][ number - 1])
- {
- continue;
- }
- else
- {
- board[i][j] =String.fromCharCode(number + 48);
- hang[i][number - 1] = true;
- lie[j][ number - 1] = true;
- mid[Math.floor(i / 3) * 3 + Math.floor(j / 3)][ number - 1] = true;
-
- if (j == 9 - 1)
- {
- dfs(i + 1, 0);
- }
- else
- {
- dfs(i, j + 1);
- }
-
- if (over)
- {
- return;
- }
- else
- {
- board[i][j] = '_';
- hang[i][ number - 1] = false;
- lie[j][ number - 1] = false;
- mid[Math.floor(i / 3) * 3 +Math.floor( j / 3)][ number - 1] = false;
- }
- }
- }
- }
-
- 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;
- getQuestion();
- dfs(0,0);
- setAnswer();
- }
- })();
如代码所示,我把鼠标右键默认事件取消了,取而代之的是右键单击时自动求解该题目,并填写答案进去。
直接高级+难度的题目
点击鼠标右键直接求解
全是绿色的,那就没问题了。
至此,完成了摸鱼也摸鱼的目标。