我试图做一个程序,将采取两个代表网格文件,使他们重叠(纵横字谜)。你知道吗
让我更清楚地解释一下:
对于我网格中的每个单元格,我试图找到一个既在水平文件的行上又在垂直文件的列上的字符。你知道吗
“文件”水平.txt“:”
bac
def
hig
“文件”垂直.txt“:”
dhc
abf
gei
程序输出:
abc
def
ghi
对于单元格[0][0](左上角),水平文件第0行和垂直文件第0列上的字母都是“a”
所以基本上,行和列中的单词都是anagrams,我想找到一种方法来从前两个单词构造最终的表。你知道吗
我在python中尝试了这个方法来寻找常见的字母(我的网格是12x12):
#!/usr/bin/env python
import re
def printCrossword(c):
for r in range(12):
print ''.join(c[r])
with open('h.txt') as hFile:
hFileData = hFile.readlines()
with open('v.txt') as vFile:
vFileData = vFile.readlines()
hData = [[0 for x in xrange(12)] for x in xrange(12)]
vData = [[0 for x in xrange(12)] for x in xrange(12)]
fData = [[0 for x in xrange(12)] for x in xrange(12)]
for r in range(12):
for c in range(12):
hData[r][c] = hFileData[r][c]
vData[c][r] = vFileData[r][c]
for r in range(12):
for c in range(12):
common = re.sub('[^' + ''.join(hData[r]) + ']', '', ''.join(vData[r]))
if len(common) == 1:
fData[r][c] = common
else:
fData[r][c] = ' '
printCrossword(hData)
print '------------'
printCrossword(vData)
print '------------'
printCrossword(fData)
以下是前4个单元格的流程图示:
除了in-and-output(我将不深入讨论)之外,您需要的是每个可能的行/列对中的字符集的简单交集算法。幸运的是Pythonhas sets built in(它们支持通过重载的
&
操作符进行交集):这将计算可能出现在输出中相应位置的字符集(通常,可能有多个候选字符):
如果预先知道不存在歧义(例如,如果所有字符都是不同的)并且网格是可解的,则可以使用^{} 函数:
输出:
相关问题 更多 >
编程相关推荐