Js数独验证

image.png

在网上看到一道数独验证的题。

数独游戏是在一个9*9的方格中进行填数字的游戏,需要满足的规则是每行每列和每个子九宫格都是1~9的不重复数字

需要完成的:给定一个九项的二维数组,用代码确认九宫格的填写是否符合数独规则;

例如:

var board = [

[5, 3, 4, 6, 7, 8, 9, 1, 2],

[6, 7, 2, 1, 9, 5, 3, 4, 8],

[1, 9, 8, 3, 4, 2, 5, 6, 7],

[8, 5, 9, 7, 6, 1, 4, 2, 3],

[4, 2, 6, 8, 5, 3, 7, 9, 1],

[7, 1, 3, 9, 2, 4, 8, 5, 6],

[9, 6, 1, 5, 3, 7, 2, 8, 4],

[2, 8, 7, 4, 1, 9, 6, 3, 5],

[3, 4, 5, 2, 8, 6, 1, 7, 9]

]

validSolution(board);

=>true

我的想法是,既然每行每列每个子九宫格都是1~9的不重复数字,也就是说只要判断这三个条件满足和为45就好了;

var equals = function(number){

return n==45;

}//判断结果是否为45

很明显 board有9行9列 判断9行需要一次遍历 判断9列又需要一次,看起来有点麻烦。

我们可以把行的和列的相加结果放在数组里,最后遍历两个数组来进行判断。

var validSolution = function(board){

var rows = [0,0,0,0,0,0,0,0,0];

var columns = [0,0,0,0,0,0,0,0,0];

for(var i=0;i<9;i++){

//i表示行 j表示列

for(var j=0;j<9;j++){

rows[i]+=board[i][j];

columns[j]+=board[i][j];

}

}

}

很简单的 rows和columns里就有了前两个条件的数据,接下来是第三个条件

每个九宫格的和都是45

找一下子格在二维数组的规律

01 02 03

11 12 13

21 22 23

没找到,再来一个

04 05 06

14 15 16

24 25 26

可以看出,小格是以三行或者三列为一个单位的,小格的相加数可以组成一个二维数组

[[0,0,0],[0,0,0],[0,0,0]]

于是,第三个条件也可以做了

var osums = [[0,0,0],[0,0,0],[0,0,0]];

for(var i=0;i<9;i++){

for(var j=0;j<9;j++){

osums[Math.floor(i/3)][Math.floor(j/3)] += board[i][j];

}

}

与上面的整合起来就是

var equals = function(number){

return number==45;

}//判断结果是否为45

var validSolution = function(board){

var rows = [0,0,0,0,0,0,0,0,0];

var columns = [0,0,0,0,0,0,0,0,0];

var osums = [[0,0,0],[0,0,0],[0,0,0]];

for(var i=0;i<9;i++){

//i表示行 j表示列

for(var j=0;j<9;j++){

rows[i]+=board[i][j];

columns[j]+=board[i][j];

osums[Math.floor(i/3)][Math.floor(j/3)] += board[i][j];

}

}

for (var i=0;i<3;i++) if (!osums[i].every(equals)) return false;

return (rows.every(equals) && columns.every(equals));

}

这样的结果是可以通过我们上面例子的验证的 但是...(下回更)

c语言数独合法验证,JavaScript数独验证相关推荐

  1. html正则表达式登录验证,JavaScript正则表达式验证登录实例

    本文实例为大家分享了js正则表达式验证登录的具体代码,供大家参考,具体内容如下 代码片段: qq登录模拟测试 function check(){ /*非空*/ if(form1.username.va ...

  2. 常用正则表达式,常用表单验证javascript代码

    常用正则表达式,常用表单验证javascript代码 function f_MobilCheck(as_SourceString) {  if(as_SourceString.match(/^13[0 ...

  3. php注册登录课件,登录注册验证(javascript)-php教学课件5.pdf

    登录注册验证(javascript)-php教学课件5.pdf 还剩 33页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! ...

  4. laravel 自动验证,提示验证成功,失败信息,引入语言包

    JavaScript也可以进行一些验证操作,但是有些情况下不好用(禁用JavaScript).这时候就要使用后端的一些机制.能够在后端对用户提交的数据进行验证,这个就是后端的自动验证. 案例:编写自动 ...

  5. html正则表达式验证电话号码,Javascript正则表达式验证账号、手机号、电话和邮箱的合法性...

    正则表达式是用于匹配字符串中字符组合的模式.在 JavaScript中,正则表达式也是对象.这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match.rep ...

  6. html验证座机号码_使用JavaScript正则表达式验证电话、手机号码

    使用 JavaScript 正则表达式验证电话.手机号码 电话手机号码正则表达式 (支持手机号码, 3-4 位区号, 7-8 位直播号码, 1 - 4 位分机号) ((\d{11})|^((\d{7, ...

  7. R语言临床预测模型的评价指标与验证指标实战:净重新分类指数NRI(Net Reclassification Index, NRI)

    R语言临床预测模型的评价指标与验证指标实战:净重新分类指数NRI(Net Classification Index, NRI) #净重新分类指数NRI

  8. R语言构建xgboost模型:交叉验证(cross validation)训练xgboost模型,配置自定义的损失函数评估函数并使用交叉验证训练xgboost模型

    R语言构建xgboost模型:交叉验证(cross validation)训练xgboost模型,配置自定义的损失函数(loss function).评估函数(evaluation function) ...

  9. R语言构建xgboost模型:交叉验证(cross validation)训练xgboost模型

    R语言构建xgboost模型:交叉验证(cross validation)训练xgboost模型 目录

  10. R语言临床预测模型的评价指标与验证指标实战:综合判别改善指数IDI(Integrated Discrimination Improvement, IDI)

    R语言临床预测模型的评价指标与验证指标实战:综合判别改善指数IDI(Integrated Discrimination Improvement, IDI) 目录

最新文章

  1. [转载]商业智能的三个层次
  2. mysql (master/slave)复制原理及配置
  3. 2015 Multi-University Training Contest 5
  4. spring框架学习(三)junit单元测试
  5. MySQL5.7 Linux安装流程
  6. (转)Python开发规范
  7. Java+Jmeter接口测试
  8. OEA 中 WPF 树型表格虚拟化设计方案
  9. cookie 和 session 区别
  10. python3使用ddt框架进行外部传参
  11. abp框架 mysql_ABP框架使用Mysql数据库
  12. nodejs设置镜像源
  13. 数学符号的读音——那些你总是记不住的数学符号的读音(α,β,γ,δ,ε,λ,ζ,η,θ,ξ,σ,φ,ψ,ω...)
  14. 程序人生 - 农夫山泉、恒大冰泉、怡宝等矿泉水品牌的产品有哪些区别?
  15. 全球 40 位 40 岁以下的富豪
  16. JAVA 实现 名单按姓氏笔画为序排列
  17. openscad螺栓数据生成2
  18. 网络统考计算机实机操作,2020年国家开放大学电大考试《计算机应用基础》网络核心课形考网考作业试题及答案(完整版)(42页)-原创力文档...
  19. Py之pycocotools:pycocotools库的简介、安装、使用方法之详细攻略续篇
  20. 物理系统之碰撞检测——碰撞器

热门文章

  1. 智慧能源:浅谈新一代信息技术在智慧能源的应
  2. MySQL 基础一(B站黑马程序员MySQL教程笔记)
  3. access阿里云 mysql_如何使用access数据库
  4. [转载] MLDN魔乐科技李兴华主讲Oracle——02 Oracle安装
  5. 数据结构课程设计(二)---算术表达式求值
  6. 如何复制百度文库上的东西
  7. Excel 2010实战技巧精粹
  8. css图片上面加文字透明,CSS实现文字半透明显示在图片上方法
  9. 计算机在数据处理方面的论文,数据挖掘论文3000字范文参考(2)
  10. native2ascii 命令