【教学类-43-11】 20231231 3*3宫格数独提取单元格坐标数字的通用模板(做成2*2=4套、3*2=6套)

本文主要是介绍【教学类-43-11】 20231231 3*3宫格数独提取单元格坐标数字的通用模板(做成2*2=4套、3*2=6套),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

背景需求:

1、以前做单元格填充,都是制作N个分开的单元格

(表格=8)

74f42848291e43a3a8259171792f8e55.png

2、这次做五宫格数独的Word模板,我图方便,就只用了一个大表格,第六行第六列隐藏框线,看上去就是分开的,实际还是一个表格(0)

94c22218bf8b442cb052184b87d0310a.png

我要提取中间4套5*5的坐标,就需要写四次XY

0cfd6d94088544ee88301e0e08a78be5.png

如果是6*3、9*9,这样的写法就太长了,要写6份,9份

所以,我需要设计一个简略的遍历代码,实现所有填充单元格坐标的提取

 

设计过程:

工具:AI对话大师

第1问

2449b9bbf4d949b1b7d5969e18599e2c.png

第2问

bf2c30ff11bd4f8ca02b5bad414bf872.png

 

第3问

064d107addfc4f15a68f50835b3a8f2c.png第4问

86142f4cec07495e9a0c6d83ec2f623c.png第5问——终于出现了我需要的结果

e10593dc8a7b40089d1876886f6efea7.png

测试1.1:3*3宫格(原始)

# 测试11*11格,2*2一共4套3*3 宫格grid_size = 7
subgrid_size = 3start_coordinates = [(0, 0), (0, 4), (4, 0), (4, 4)]
cell_coordinates = []for start_coord in start_coordinates:i, j = start_coordsubgrid_coordinates = []for x in range(subgrid_size):for y in range(subgrid_size):subgrid_coordinates.append((i + x, j + y))cell_coordinates.append(subgrid_coordinates)bg=[]# 打印结果
for coordinates in cell_coordinates:# print(coordinates) for c in  coordinates:# print(c)        # 元组 (1, 2) 样式s = ''.join(map(str, c))     # 元组 (1, 2) 转换为字符串 '12'# print(str(s))        #  '12'a1='%02d'%int(s[0])   #  '01'a2='%02d'%int(s[1])   #  '02'bg.append('{}{}'.format(a1,a2))  #  '0102'
print(bg)# 左上 第1套
# ['0000', '0001', '0002', 
# '0100', '0101', '0102', 
# '0200', '0201', '0202', # 右上 第2套
# '0004', '0005', '0006', 
# '0104', '0105', '0106', 
# '0204', '0205', '0206', # 左下 第3套
# '0400', '0401', '0402',
# '0500', '0501', '0502',
# '0600', '0601', '0602',# 右下 第4套
# '0404', '0405', '0406', 
# '0504', '0505', '0506', 
# '0604', '0605', '0606']

运行结果

c5daf163470a43c08542f7298cc44338.png测试2:3*3宫格(改坐标起始参数)

# 测试11*11格,2*2一共4套3*3 宫格
'''
目的:数独09 N宫格X乘Y套单元格计算,如何在一个表格里,找出所有填数字的单元格
以“3宫格”做2*2=4套,“3宫格”做3*2=6套为例
作者:阿夏(参考)
时间:2023年12月31日 13:35
'''
# import zfill# 几宫格
gg = 3
# 底边几套.底边看有2份
db=3
# 侧边几套 侧边看也是2份
cb=2# 棋盘格子数量,# 如果正方形:底边2*侧边2,就是3*3宫格 2*2=4套,底边边格子数量就是3*2+1=7,侧边格子数量就是3*2+1=7,
# 如果长方形:底边3*侧边2,就是3*3宫格,3*2=6套 底边格子数量就是3*3+2=11,侧边格子数量就是3*2+1=7,
# if db==cb:
db_size = gg*db+(db-1)
cb_size=  gg*cb+(cb-1)
print('{}宫格排列底{}侧{}共{}套,底边格子数{}'.format(gg,db,cb,db*cb,db_size ))
print('{}宫格排列底{}侧{}共{}套,侧边格子数{}'.format(gg,db,cb,db*cb,cb_size ))# 确定每个宫格的左上角坐标 00 04 40  44
bgszm=[]
for a in range(0,cb_size,gg+1):    # 0-11每隔4,写一个坐标  侧边yfor b in range(0,db_size,gg+1):  # 0-11每隔4,写一个坐标  侧边xbgszm.append('{}{}'.format('%02d'%a,'%02d'%b))
print(bgszm)
# 3宫格排列底3侧2共6套,底边格子数11
# 3宫格排列底3侧2共6套,侧边格子数7
# ['0000', '0004', '0008', '0400', '0404', '0408']# 转为元祖
start_coordinates = [(int(s[0:2]), int(s[2:4])) for s in bgszm]
cell_coordinates = []# 推算每个起始格子后面的单元格数字
for start_coord in start_coordinates:i, j = start_coordsubgrid_coordinates = []for x in range(gg):for y in range(gg):subgrid_coordinates.append((i + x, j + y))cell_coordinates.append(subgrid_coordinates)# 打印结果(元祖样式)
bg=[]
for coordinates in cell_coordinates:# print(coordinates)     # [(4, 8), (4, 9), (4, 10), (5, 8), (5, 9), (5, 10), (6, 8), (6, 9), (6, 10)]for c in  coordinates:print(c)        # 元组 (1, 2) 样式s = ''.join(str(num).zfill(2) for num in c)   # zfill将元组 (1, 2) 转换为字符串 '0102' 特别是(5,10)这种必须转成2个数字0510print(str(s))        #  '12'bg.append(s)  #  '0102'
print(bg)# # 3*3宫格的2*2=4套题坐标
# # 左上 第1套
# # ['0000', '0001', '0002', 
# # '0100', '0101', '0102', 
# # '0200', '0201', '0202', # # 右上 第2套
# # '0004', '0005', '0006', 
# # '0104', '0105', '0106', 
# # '0204', '0205', '0206', # # 左下 第3套
# # '0400', '0401', '0402',
# # '0500', '0501', '0502',
# # '0600', '0601', '0602',# # 右下 第4套
# # '0404', '0405', '0406', 
# # '0504', '0505', '0506', 
# # '0604', '0605', '0606']# # 3*3宫格的3*2=6套题坐标# # 3宫格排列底3侧2共6套,底边格子数11
# # 3宫格排列底3侧2共6套,侧边格子数7
# # 6套题的首字坐标['0000', '0004', '0008', '0400', '0404', '0408']
# # 6套题的全部坐标# ['0000', '0001', '0002', 
#  '0100', '0101', '0102', 
#  '0200', '0201', '0202', # '0004', '0005', '0006',
# '0104', '0105', '0106', 
# '0204', '0205', '0206', # '0008', '0009', '0010', 
# '0108', '0109', '0110',
# '0208', '0209', '0210',# '0400', '0401', '0402',
# '0500', '0501', '0502', 
# '0600', '0601', '0602', # '0404', '0405', '0406',
# '0504', '0505', '0506', 
# '0604', '0605', '0606', # '0408', '0409', '0410', 
# '0508', '0509', '0510', 
# '0608', '0609', '0610']

 

3宫格两款:

1、  3宫格  4套(2*2)正方形,

 

f91edbe5b90e47fc8614fd2c7cf74a02.png

85848c90db4c4e87bdfb238bb078766e.png

7cb663c8b8d64dc7b606d582983238f7.png

2、3宫格  6套(3*2)长方形

150883d880f741d08772437d9e390857.png

ccb55de845ee40d9bb9d660b852e397d.png

917edbdbf315461586d7eb03fd35b93d.png

感悟:

代码里面的技术难点 都是用Chat GDP AI对话生成的,提高了数据搜索的效率

2aae12d6dec845af8afd2b42c0270a13.png

ea8f98cf498a41f19122b25399f04922.png76eeb65be20843298b168c06263cd96c.pngb772ed33e18d4aab942c0de675a48df2.png

 

这篇关于【教学类-43-11】 20231231 3*3宫格数独提取单元格坐标数字的通用模板(做成2*2=4套、3*2=6套)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/559660

相关文章

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

详解Python中通用工具类与异常处理

《详解Python中通用工具类与异常处理》在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationEx... 目录1. 通用异常类:ValidationException2. 通用工具类:Utils3. 示例文

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n