【教学类-43-15】 20240103 (5宫格数独:内存数据不够计算) 不重复的基础模板数量:未知

背景需求:

测试5宫格有多少种不重复的基础模板(只测试所有的25数字一组有多少个)





# 测试11*11格,2*2一共4套3*3 宫格
'''
目的:数独14    5宫格有不同的基础模板
作者:阿夏
时间:2024年01月04日 13:35


'''

import random
from win32com.client import constants,gencache
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
import os,time

import docx
from docx import Document
from docx.shared import Pt 
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn


from docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColor


# 生成题库
import random
import math
from itertools import permutations


# num=int(input('生成几份\n'))
# 制作"单元格"# 几宫格
hsall=5
# int(input('3宫格数独=3\n'))
hs=hsall



print('------第2步:制作3宫格的12套题的内容-------')

# 制作3宫格的12套题目(没有空格,只有基础模板)
lst=[]
for b in range(1,hs+1):
    lst.append(b)
print(lst)

permutations_list = list(permutations(lst))
numbers = [list(permutation) for permutation in permutations_list]
print(numbers)
# [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
# 6种组合
# 互相组合成3组
import itertools

# 计算排列数量并生成所有可能的排列
combinations2 = list(itertools.permutations(numbers, hs))

# 输出排列数量
# print(len(combinations2))
# 120

# # 把所有数字都提取成元素
ll=[]
for o1 in combinations2:
    for o2 in o1:
        for o3 in o2:
            ll.append(o3)
# print(ll)
# print(len(ll))
# 1080

v=hs*hs
# 16个数字抽取一组
f=[]
for i in range(int(len(ll)/v)):
    f.append(ll[i*v:i*v+v])
# print(f)
print(len(f))
#120条


# # # # 遍历表格,把0、5、10相同的内容删除,横向的数字1234都正确了,现在只要排除竖向不对的

# P=[]
# zz=[]
# u=[]
# for k in f:  

#     if int(k[0])!=int(k[4])and \
#         int(k[0])!=int(k[8])and 
#     int(k[0])!=int(k[12]) and int(k[4])!=int(k[8]) and int(k[4])!=int(k[12])and int(k[8])!=int(k[12]) and \
#         int(k[0])+int(k[4])+int(k[8])+int(k[12])==10 and \
#     int(k[1])!=int(k[5])and int(k[1])!=int(k[9])and int(k[1])!=int(k[13]) and int(k[5])!=int(k[9]) and int(k[5])!=int(k[13])and int(k[9])!=int(k[13])  and int(k[1])+int(k[5])+int(k[9])+int(k[13])==10 and \
#     int(k[2])!=int(k[6])and int(k[2])!=int(k[10])and int(k[2])!=int(k[14]) and int(k[6])!=int(k[10]) and int(k[6])!=int(k[14])and int(k[10])!=int(k[14]) and int(k[2])+int(k[6])+int(k[10])+int(k[14])==10 and\
#     int(k[3])!=int(k[7])and int(k[3])!=int(k[11])and int(k[3])!=int(k[15]) and int(k[7])!=int(k[11]) and int(k[7])!=int(k[15])and int(k[11])!=int(k[15])  and int(k[3])+int(k[7])+int(k[11])+int(k[15])==10:
        
       
#         zz.append(k)
# print(zz)
# print('不重复题目数量{}'.format(len(zz)))

运行了90分钟,结果报错 MemoryError,显示内存不够计算

【教学类-43-15】 20240103 (5宫格数独:内存数据不够计算) 不重复的基础模板数量:未知_第1张图片

显示内存不够计算

【教学类-43-15】 20240103 (5宫格数独:内存数据不够计算) 不重复的基础模板数量:未知_第2张图片

是否可以在“5套组合””这一步,就直接剔除一些数据?

这篇文章有破解的思路,逐一尝试

python中memoryerror_mob649e8164659f的技术博客_51CTO博客python中memoryerror,#Python中的MemoryError错误在编写Python程序时,您可能会遇到`MemoryError`错误。这个错误表示您的程序尝试使用超出可用内存的资源。本文将介绍`MemoryError`错误的原因、如何处理它以及一些预防内存错误的最佳实践。##1.什么是MemoryError?`MemoryError`是Python解释器在尝试分配内存时抛出的异常。当您的程序需要存储 icon-default.png?t=N7T8https://blog.51cto.com/u_16175500/6892741

你可能感兴趣的:(Python,python,开发语言)