首页 > 解决方案 > 从单词搜索游戏中找到解决方案

问题描述

我有一个文件,其中包含一个矩阵,这是我的 wordsearch 和一些我需要在其中找到的单词。

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)

要解决这个难题,您需要搜索然后从 wordsearch 中删除列表中所有单词的 OCCURRENCES(如果有多个)。

将保留的图表字母,按行和列的顺序全部排列,它们将形成游戏的解决方案。我不知道如何继续以及如何找到“SANGUEBLU”的解决方案

标签: python

解决方案


给定以下初始化:

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))

这输出:

SANGUEBLU

推荐阅读