当前位置: 首页 > news >正文

数独生成题目lua脚本

 

 

--获取某元素在表中的位置
local function isInside(value,tab)
for a,v in ipairs(tab) do
if v==value then
return a
end
end
return -1
end

local function print_board(table)
local str=table[0]..","
for k,v in pairs(table) do
if k>0 and k<81 then 
if (k+1)%9==0 then str=str..v..",\n"
else str=str..v..","
end
end
end
print(str)
end
---------------------------------------------------------------------------
---------------------------------------------------------------------------

--题目,答案
local nums,num={},{}
--游戏设定:显示概率
local p,pel=0.3,100000
--填充是否有效
local function isRowLegal(i,v)
local row,i1=math.floor(i/9),0
for i1=0,8 do
if (v==num[row*9+i1])and(i~=row*9+i1) then
return false
end
end
return true
end
local function isColLegal(i,v)
local col,i1=i%9,0
for i1=0,8 do
if (v==num[i1*9+col])and(i~=i1*9+col) then
return false
end
end
return true
end
local function isSubLegal(i,v)
local row=math.floor(i/9)
local col=i%9
local x1=math.floor(row/3)*3
local y1=math.floor(col/3)*3
local i1,i2=0,0
for i1=0,2 do
for i2=0,2 do
if (v==num[(x1+i1)*9+y1+i2])and(i~=(x1+i1)*9+y1+i2) then
return false
end
end
end
return true
end
local function isLegal(i,v)
if (not(isRowLegal(i,v)))or(not(isColLegal(i,v)))or(not(isSubLegal(i,v))) then
return false
end
return true
end
--递归填充数字
local function setN(i)
if i==81 then
return true
elseif num[i]~=0 then
return setN(i+1)
else
local randOrder,i1={},0
for i1=0,9 do
randOrder[i1]=i1
end
for i1=1,9 do
local r=math.random(1,9)
local t1=randOrder[r]
randOrder[r]=randOrder[i1]
randOrder[i1]=t1
end
for i1=1,9 do
if isLegal(i,randOrder[i1]) then
num[i]=randOrder[i1]
if setN(i+1) then
return true
end
end
end
end
num[i]=0
return false
end

--获取随机数独
local function getNum()
math.randomseed(os.time())
local i1=0
for i1=0,81 do
num[i1]=0
end
setN(0)
return num
end

local function run()
num=getNum()
print("随机生成数独")
print_board(num)
for j1=0,80 do nums[j1]=num[j1] end
cl={}
for j1=0,80 do
j2=math.random(1,pel)
if j2<=p*pel then
cl[j1]=nums[j1]
--num[j1]=0
else
cl[j1]=0
num[j1]=0 
end
end
print("生成题目")
print_board(num)
end
run()

http://www.dtcms.com/a/540341.html

相关文章:

  • 影响网站加载速度wordpress获得当前文章的相关文章
  • Hive 技术深度解析与 P7 数据分析架构师多行业全场景实战课程合集(视频教程)
  • 嘉兴高端网站建设公司网络安全等级保护
  • HOW - localstorage 超时管理方案
  • java如何判断上传文件的类型,不要用后缀名判断
  • 【Linux】系统备份与恢复:rsync 与 tar 的完整使用教程
  • ROS2系列(3):第一个C++节点
  • zookeeper是什么
  • 构建“全链路解决方案”:解决集团化医院信创的三重难题
  • 网站建设区别广安市邻水建设局网站
  • 网站中的文字滑动怎么做化妆品网站建设策略
  • 【Netty4核心原理⑮】【Netty 编解码的艺术】
  • PHP-Casbin 在分布式服务中利用 Watcher 做策略同步
  • OCP考试必须培训吗?费用多少?
  • SpringBoot + 百度内容安全实战:自定义注解 + AOP 实现统一内容审核(支持文本 / 图片 / 视频 + 白名单 + 动态开关)
  • 心智结构与组织学习
  • NAS 私有云零信任部署:cpolar 加密访问 + 本地存储,破解安全与便捷难题
  • C++面向对象继承全面解析:不能被继承的类、多继承、菱形虚拟继承与设计模式实践
  • 只做财经的网站厦门高端网站建设公
  • 星宿网站建设系统开发过程中原型有哪些作用
  • Angular 入门项目
  • 架构解析:衡石科技如何基于AI+Data Agent重构智能数据分析平台
  • 云栖实录:重构可观测 - 打造大模型驱动的云监控 2.0 与 AIOps 新范式
  • AR技术如何确保数据准确无误?
  • Python-openai对话LLM
  • 智慧码垛系统介绍
  • Axure高保真View Design框架元件库
  • 网站 linux 服务器昆明企业网站开发公司
  • 网站介绍经过下拉怎么做wordpress统计访问ip
  • 济南品牌网站建设低价wordpress建站要钱吗