python - 从单词搜索游戏中找到解决方案
问题描述
我有一个文件,其中包含一个矩阵,这是我的 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”的解决方案
解决方案
给定以下初始化:
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
推荐阅读
- excel - 如何水平增加单元格值?在 VBA 宏中
- apache-nifi - 如何在 NiFi 上两阶段拆分大型 Json 文件
- isabelle - 什么是cterm?
- sql - NVL 的查询输出
- javascript - 使用 javascript 单击类元素时显示弹出窗口
- mysql - 查询得到我不明白的结果
- python - 使用 Python 中的 NewsPaper 库将多个新闻文章源抓取到一个列表中?
- flutter - 焦点更改时的 TextFormField 验证
- java - 已部署的 Java 应用程序在使用 32 位库的 Windows 7 64 位操作系统上显示“不是有效的 32 位应用程序”
- ios - iOS TimeZone 获取三个字母的缩写