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

完整教程:数独生成题目lua脚本

完整教程:数独生成题目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.jsqmd.com/news/373147/

相关文章:

  • 2026年沈阳酒店推荐:商旅与家庭出行场景深度评测,解决便捷与舒适核心痛点 - 品牌推荐
  • 2026论文降重平台大盘点:告别“延毕焦虑”,这几款工具凭什么上榜? - 品牌观察员小捷
  • 2026年度降重工具红黑榜:10大平台实测对比,谁是科研党的首选? - 品牌观察员小捷
  • 2026年长白山度假酒店推荐:融合非遗体验与自然景观场景,解决同质化痛点的全面评测 - 品牌推荐
  • 2026年美国投资移民机构推荐:多国法律资源整合评价,针对政策变动与项目风险痛点 - 品牌推荐
  • 2026年热门的品牌同步隐藏轨/缓冲同步隐藏轨品牌厂商推荐(更新) - 品牌宣传支持者
  • 2026年热门的襄阳装修定制/襄阳装修家电家具可靠合作公司 - 品牌宣传支持者
  • 劳保鞋厂家哪家综合实力强?2026年劳保鞋厂家推荐与排名,解决定制化与供应链痛点 - 品牌推荐
  • 2026年劳保鞋厂家推荐:基于工业多场景深度评测,解决防护不足与笨重痛点并附排名 - 品牌推荐
  • 2026年劳保鞋厂家推荐:多行业应用横向评价,针对足部疲劳与触电风险精准指南 - 品牌推荐
  • Nexus 私有仓库发布 Jar 包 - 教程
  • 如何选择沈阳核心区酒店?2026年沈阳酒店全面推荐与评价,直击区位与综合体验痛点 - 品牌推荐
  • 新论程序员的管理
  • 2026年靠谱的机床铸件/铸件怎么选直销厂家价格参考 - 品牌宣传支持者
  • 2026年沈阳酒店推荐:商旅休闲多场景深度评价,破解交通与睡眠核心痛点 - 品牌推荐
  • 2026年靠谱的信号编码器连接器/圆形航空连接器高评分品牌推荐(畅销) - 品牌宣传支持者
  • 论程序员的管理特别版本
  • 如何为家庭滑雪游选酒店?2026年长白山度假酒店全面推荐与评价,解决安全与便利核心痛点 - 品牌推荐
  • 2026年沈阳酒店推荐:商旅与休闲出行的多维住宿评价指南 - 品牌推荐
  • 如何为团队会议选度假酒店?2026年长白山度假酒店评测与推荐,解决设施专业与生态场景痛点 - 品牌推荐
  • 长白山酒店哪家适合家庭?2026年推荐与评价,解决空间需求与活动丰富度核心痛点 - 品牌推荐
  • 2026年口碑好的襄阳90 平米装修/襄阳平层装修高口碑品牌参考选哪家 - 品牌宣传支持者
  • 2026年长白山度假酒店推荐:家庭亲子与自驾场景深度评价,解决选择困难与体验同质痛点 - 品牌推荐
  • 2026年企业展厅设计施工公司推荐:基于全国落地案例与成本控制痛点的深度评价 - 品牌推荐
  • 如何评估2026年企业展厅设计施工公司?推荐与综合评测,解决创意落地与施工脱节痛点 - 品牌推荐
  • 企业展厅建设如何选择服务商?2026年企业展厅设计施工公司推荐与排名,应对异地项目管理与行业适配难题 - 品牌推荐
  • 企业展厅设计施工哪家更务实?2026年工程落地能力推荐与评测,解决效果图与实景差异痛点 - 品牌推荐
  • 2026年评价高的船用不锈钢灯/PC罩不锈钢灯优质厂商精选推荐(口碑) - 品牌宣传支持者
  • 企业展厅设计施工哪家强?2026年公司推荐与综合评测,解决创意设计与工程落地脱节痛点 - 品牌推荐
  • 2026年UEM统一端点管理推荐:零信任趋势下全面评测,涵盖移动金融与政务场景安全痛点 - 品牌推荐