Python 从单词搜索游戏中找到解决方案

Python 从单词搜索游戏中找到解决方案,python,Python,我有一个带有矩阵的文件,这是我的文字搜索,还有一些我需要在其中查找的文字 O T N E G R A S A E R N N C O R A L L O O A I B L U E E V G U T O R E N T I I A V I O L E T T O O R O C R A R I

我有一个带有矩阵的文件,这是我的文字搜索,还有一些我需要在其中查找的文字

O   T   N   E   G   R   A   S   A   E
R   N   N   C   O   R   A   L   L   O
O   A   I   B   L   U   E   E   V   G
U   T   O   R   E   N   T   I   I   A
V   I   O   L   E   T   T   O   O   R
O   C   R   A   R   I   A   E   L   O
D   A   B   I   M   A   L   V   A   P
I   P   C   I   E   L   O   G   L   R
C   O   R   P   O   S   O   U   A   O
A   P   I   E   N   O   M   I   L   P


ACIDO
ARGENTO
BLU
CIELO
CORALLO
CORPOSO
ELETTRICO
LATTE
LIMONE
MALVA
NERO
OCRA
OPACITA
ORO
PAGLIERINO
PIENO
PORPORA
PRIMITIVO
VIOLA
VIOLETTO
对于解决方案,我考虑过类似的问题:

 with open('cp5_Colori.txt', 'r') as f:
        import pprint
        data=f.read().replace("\t","")
        A=[]
        B=set()
        data=data.split("\n\n")
        word_list=data[1].split()
        lista_orizzontale=data[0].split()
        puzzle=[list(row) for row in lista_orizzontale]
        for parola in word_list:
            for lista in puzzle:
                x=puzzle.index(lista)
                for carattere in lista:
                    y=lista.index(carattere)
                    if carattere.upper() == parola[0]:
                        for direction in [(1,0),(1,1),(0,1),(-1,1),(-1,0),(-1,-1),(0,-1),(1,-1)]:
                            (dx, dy) = direction
                            for i in range(len(parola)):
                                if ((x+dx*i)<len(puzzle)) and ((y+dy*i)<len(lista)) == True:
                                    if puzzle[x+dx*i][y+dy*i].upper()== parola[i]:
                                        puzzle[x+dx*i][y+dy*i]=puzzle[x+dx*i][y+dy*i].lower()







        pprint.pprint(puzzle)
要解决这个难题,您需要搜索,然后从单词搜索中删除所有出现的单词(如果列表中有多个单词)

图中保留的字母按行和列的顺序排列,它们将构成游戏的解决方案。
我不知道如何继续,也不知道如何找到SANGUEBLU的解决方案一旦您使用代码对信件进行了大小写,您可以通过以下方式获得结果:

crossed = [['o', 't', 'n', 'e', 'g', 'r', 'a', 'S', 'a', 'e'], ['r', 'n', 'n', 'c', 'o', 'r', 'a', 'l', 'l', 'o'], ['o', 'a', 'i', 'b', 'l', 'u', 'e', 'e', 'v', 'g'], ['U', 't', 'o', 'r', 'e', 'n', 't', 'i', 'i', 'a'], ['v', 'i', 'o', 'l', 'e', 't', 't', 'o', 'o', 'r'], ['o', 'c', 'r', 'a', 'r', 'i', 'a', 'e', 'l', 'o'], ['d', 'a', 'b', 'i', 'm', 'a', 'l', 'v', 'a', 'p'], ['i', 'p', 'c', 'i', 'e', 'l', 'o', 'G', 'l', 'r'], ['c', 'o', 'r', 'p', 'o', 's', 'o', 'U', 'a', 'o'], ['a', 'p', 'i', 'e', 'n', 'o', 'm', 'i', 'l', 'p']]

import re
result = ''.join([ ''.join(line) for line in crossed ])
print(result)
hidden_word = ''.join(re.findall(r'[A-Z]', result))
print (hidden_word) #=> SUGU

但是,您似乎在代码中省略了太多的单词。

给出了以下初始化:

puzzle = [l.split() for l in '''O   T   N   E   G   R   A   S   A   E
R   N   N   C   O   R   A   L   L   O
O   A   I   B   L   U   E   E   V   G
U   T   O   R   E   N   T   I   I   A
V   I   O   L   E   T   T   O   O   R
O   C   R   A   R   I   A   E   L   O
D   A   B   I   M   A   L   V   A   P
I   P   C   I   E   L   O   G   L   R
C   O   R   P   O   S   O   U   A   O
A   P   I   E   N   O   M   I   L   P'''.splitlines()]

word_list = '''ACIDO
ARGENTO
BLU
CIELO
CORALLO
CORPOSO
ELETTRICO
LATTE
LIMONE
MALVA
NERO
OCRA
OPACITA
ORO
PAGLIERINO
PIENO
PORPORA
PRIMITIVO
VIOLA
VIOLETTO'''.splitlines()
以下代码将解决您的问题:

from itertools import product
removals = []
for word in word_list:
    for row in range(len(puzzle)):
        for col in range(len(puzzle[row])):
            for dr, dc in product(range(-1, 2), repeat=2):
                if dr or dc:
                    removal = []
                    for i in range(len(word)):
                        r = row + dr * i
                        c = col + dc * i
                        if not (0 <= r < len(puzzle) and 0 <= c < len(puzzle[row])) or puzzle[r][c] != word[i]:
                            break
                        removal.append((r, c))
                    else:
                        removals.append(removal)
for removal in removals:
    for row, col in removal:
        puzzle[row][col] = None
print(''.join(char for row in puzzle for char in row if char))

阅读,我将研究使用numpy将字符放入实际数组,然后你可以使用切片来获取行和列,并检查它们是否包含单词。不要破坏你的问题?请不要通过破坏你的帖子为其他人做更多的工作。通过在Stack Exchange SE网络上发布,您已根据授予SE分发该内容的不可撤销权利,即无论您未来的选择如何。根据SE政策,该帖子的非故意破坏版本是发布的版本。因此,任何故意破坏行为都将恢复原状。如果您想了解有关删除帖子的更多信息,请参阅:谢谢您,先生。。是的,我还需要对角线。。。但是我知道如何找到这些词。。我的问题是找到游戏解决方案中剩下的角色,在删除所有找到的单词Smart downcase found letters后,下面是如何检索结果,但有些错误。感谢您的帮助,但解决方案应该是SANGUEBLU而不是SUGU。。我的代码出了什么问题?我怎样才能修好它?
SANGUEBLU