[英]Solving a wordsearch and delete the found characters
這就是問題:
要解決這個難題,您需要搜索,然后從單詞搜索中刪除列表中所有出現的單詞(如果有多個)。
將保留的圖表字母按行和列順序排列,將構成游戲的解決方案。
單詞可以在圖中水平(從右到左,或從左到右),垂直(從上到下或向下)和對角線(從上到下或從下到上)出現在圖中。
定義一個函數es1(ftxt),該函數使用一個文本文件的地址,包含一個爭用的單詞圖,並返回游戲的字符串解決方案。
fname文件包含單詞列表后面的單詞搜索。 圖之前的一系列1條或多條空行將圖與單詞列表分開,並跟隨單詞列表。 該圖由每行的行(每行一行和連續的行)選項卡記錄,並由單個字符('\\ t')分隔。 連續繁忙單詞的列表,每行一個單詞。
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
我已經找到了所有的行,列和對角線的50%,但是我不知道如何找到在各個方向上找到的字符的坐標以刪除它,然后找到解決方法。
這是我的代碼:
with open('cp5_Colori.txt', 'r') as f:
data=f.read().replace("\t","")
data=data.split("\n\n")
lista_parole=data[1].split()
lista_orizzontale=data[0].split()
oriz_contraria=[x[::-1] for x in lista_orizzontale]
diz={}
c=0
b=0
cruzi_verticali=[]
for x in lista_parole: #loop to find rows and add the
found
words to a diz
for y in lista_orizzontale:
if x in y:
diz[x]=1
for z in oriz_contraria:
if x in z:
diz[x]=1
while c <= len(lista_orizzontale):
cruzi_verticali.append(lista_orizzontale[c][b]) #loop for
columns
c+=1
if c==len(lista_orizzontale):
cruzi_verticali.append("///")
c=0
b+=1
if b==len(lista_orizzontale):
c=len(lista_orizzontale)+1
joinata="".join(cruzi_verticali)
parole_verticali=joinata.split("///")
vert_contraria=[k[::-1] for k in parole_verticali] #convert to a list
of
strings and find
the
reversed of
colums
conta=0
conta2=0
for x in lista_parole:
for y in parole_verticali:
if x in y: #loop to add search word to
the diz
diz[x]=1
for z in vert_contraria:
if x in z:
diz[x]=1
cruzi_diagonali=[]
parole_diagonali=[]
diag_contraria=[]
prova=[]
itera=len(parole_verticali)**2
while len(prova)!=len(parole_verticali)-1:
cruzi_diagonali.append(parole_verticali[conta][conta2])
conta+=1
conta2+=1
if conta==len(lista_orizzontale):
cruzi_diagonali.append("///")
#loop to find a part of
diagonals
if conta==len(parole_verticali)-1:
conta=0
if conta==0:
prova.append(0)
conta=conta+len(prova)
conta2=0
prova2=[]
conta3=0
conta4=1
while len(prova2)!=len(parole_verticali)-1:
cruzi_diagonali.append(parole_verticali[conta3][conta4])
conta3+=1
conta4+=1
if conta4==len(lista_orizzontale):
cruzi_diagonali.append("///")
#loop to find lower
diagonals
if conta4==len(parole_verticali)-1:
conta4=0
if conta4==0:
prova2.append(0)
conta4=conta4+len(prova2)
conta3=0
joinata2="".join(cruzi_diagonali)
parole_diagonali=joinata2.split("///") #convert diagonals
into
a list of strings
diag_contraria=[k[::-1] for k in parole_diagonali]
for x in lista_parole:
for y in set(parole_diagonali):
if x in y: #loop to add the found words in
the dictionary as keys
diz[x]=1
for z in set(diag_contraria):
if x in z:
diz[x]=1
soluzione=[]
lista_totale=[]
lista_orizzontale2=lista_orizzontale[:]
for k in diz.keys():
for k2 in lista_orizzontale2: #all the found words in
the
row replaced with "*"
if k in k2:
hg=len(k)*"*"
k3=k2.replace(k,hg)
lista_orizzontale2.append(k3)
if "*" not in k2:
lista_orizzontale2.remove(k2)
有人可以通過在單詞搜索中找到找到的字母的所有坐標來幫助我嗎?
您正在為自己制造困難。 無需在各個方向上轉換拼圖陣列,只需依次訪問每個字母並從該字母開始的八個方向中的每個方向尋找單詞。
由於這似乎是一種家庭作業,因此我將留給您填寫詳細信息,但是代碼的基本輪廓應如下所示:
puzzle = [list(row) for row in 'OTNEGRASAE', 'RNNCORALLO', 'OAIBLUEEVG',
'UTORENTIIA', 'VIOLETTOOR', 'OCRARIAELO', 'DABIMALVAP', 'IPCIELOGLR',
'CORPOSOUAO', 'APIENOMILP']
word_list = ['ACIDO', 'ARGENTO', 'BLU', 'CIELO', 'CORALLO', 'CORPOSO', 'ELETTRICO',
'LATTE', 'LIMONE', 'MALVA', 'NERO', 'OCRA', 'OPACITA', 'ORO', 'PAGLIERINO',
'PIENO', 'PORPORA', 'PRIMITIVO', 'VIOLA', 'VIOLETTO']
for {each word in word_list}:
for {each cell in puzzle}:
if {cell.upper() == first character of word}:
for direction in [(1,0),(1,1),(0,1),(-1,1),(-1,0),(-1,-1),(0,-1),(1,-1)]:
(dx, dy) = direction
{Does the puzzle contain all the other characters of word in this direction?}
{If so change these cells to lower case, and skip to next word}
{extract all the remaining upper case letters from the puzzle}
這是我從您的想法得到的新代碼:
with open('cp5_Colori.txt', 'r') as f:
import pprint
data=f.read().replace("\t","")
A=[]
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 ((puzzle[x+dx*i][y+dy*i].upper()== parola[i]) and ((x+dx*i)<len(puzzle)) and ((y+dy*i)<len(lista))) == True:
A.append(puzzle[x+dx*i][y+dy*i])
if "".join(A)==parola:
else:
break
pprint.pprint(puzzle)
這里
我不急於找到解決方案。 解決方法應該是“ sangueblu”是什么問題?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.