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

news/2024/7/20 22:15:23 标签: 深度优先, 算法

背景

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

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

测试

直接高级+难度的题目

点击鼠标右键直接求解

 

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

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


http://www.niftyadmin.cn/n/5042700.html

相关文章

基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(二)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 1、重写websocketserver&#xff0c;如下&#xff0c;这里主要是用到了redis的订阅机制&#xff0c;具体也…

Fourier变换的积分性质及其证明过程

Fourier变换的积分性质及其证明过程 一、积分性质 如果当 t → ∞ t \to \infty t→∞时&#xff0c; g ( t ) ∫ − ∞ t f ( t ) d t → 0 g(t) \int_{ - \infty }^t {f(t){\rm{d}}t \to 0} g(t)∫−∞t​f(t)dt→0&#xff0c;则&#xff1a; F [ ∫ − ∞ t f ( t ) …

【python基础】—内置模块os常用功能介绍

文章目录 前言一、模块变量os.nameos.environ 二、文件与文件夹os.getcwd(path)os.chdir(path)os.listdir(path)os.mkdir(path)os.remove(path)os.rename(src,dst) 三、os的子模块&#xff1a;Path模块os.path.abspath(path)os.path.basename(path)os.path.dirname(path)os.pat…

多商户扫码买单小程序源码 多门店扫码买单源码

多商户扫码买单小程序源码 多门店扫码买单源码 功能介绍&#xff1a; 总系统&#xff1a;添加平台、服务商配置、开放平台、系统设置、附件设置、帮助中心、网站留言、通知公告、官网模板 商品添加&#xff1a;商品视频、商品规格、自动发货、在线卡密、单独分销、分红设置、…

什么是AI视频智能分析?你真的懂AI视频分析吗?

AI视频分析&#xff0c;顾名思义就是指利用人工智能技术对视频数据进行分析和处理的过程。通过计算机视觉和深度学习等技术&#xff0c;能自动地从视频数据中提取有用的信息、模式与结构&#xff0c;并生成对视频内容的理解和推理。那么&#xff0c;AI视频分析技术包括哪几个方…

软考网络工程师华为配置考点总结

华为交换机配置基础 1.vlan的配置 华为设备中划分VLAN的方式有&#xff1a; 静态的划分&#xff1a;基于接口动态划分&#xff1a;基于MAC地址、基于IP子网、基于协议、基于策略&#xff08;MAC地址、Ip地址&#xff09;。 其中基于接口划分VLAN&#xff0c;是最简单&#x…

在对bbox 进行坐标系转换时heading的处理--使用向量的旋转

实际做题中我们可能会遇到很多有关及计算几何的问题&#xff0c;其中有一类问题就是向量的旋转问题&#xff0c;下面我们来具体探讨一下有关旋转的问题。 首先我们先把问题简化一下&#xff0c;我们先研究一个点绕另一个点旋转一定角度的问题。已知A点坐标(x1,y1)&#xff0c;…

上PICO,沉浸式观看亚运直播,参与跨国界游戏竞技

备受瞩目的杭州第19届亚运会&#xff0c;将于9月23日正式开幕。据悉&#xff0c;这也是有史以来项目最多的一届亚运会&#xff0c;除部分传统奥运项目外&#xff0c;还包含武术、藤球、板球、克柔术、柔术等亚洲特色项目&#xff0c;以及霹雳舞、电子竞技等深受年轻人喜爱的新兴…