当前位置:首页 > 编程笔记 > 正文
已解决

摸鱼也摸鱼之在线数独自动求解

来自网友在路上 185885提问 提问时间:2023-09-22 22:55:45阅读次数: 85

最佳答案 问答题库858位专家为你答疑解惑

背景

在发现被老板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();}
})();

如代码所示,我把鼠标右键默认事件取消了,取而代之的是右键单击时自动求解该题目,并填写答案进去。

测试

直接高级+难度的题目

点击鼠标右键直接求解

 

全是绿色的,那就没问题了。

至此,完成了摸鱼也摸鱼的目标。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"摸鱼也摸鱼之在线数独自动求解":http://eshow365.cn/6-11711-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!