2
I think I was explicit. It is given in a file. txt in the first line the grid size and then the words I should put in the generated letter soup. The problem is that when I get the soup the words coincide in their positions what is not intended. Can anyone help me? The function that matters is the word. I just put the rest of the code to understand better. Here I leave the code:
import random
import string
fi=input('Insira o nome do ficheiro de entrada(entry.txt): ')
fo=input('Insira o nome do ficheiro de saida(.txt): ')
tamanho_grelha=[]
words=[]
matriz=[]
def ler_ficheiro(arquivo):
file=open(arquivo)
n=file.readline()
lista=n.split()
lista=list(map(int,lista)) #coloca o tamanho da sopa em uma lista
for i in lista:
tamanho_grelha.append(i)
for line in file:
line=line.replace("\n","") #coloca as palavras em uma lista
words.append(line)
file.close()
def gerar_grelha():
n=tamanho_grelha[0]
p=tamanho_grelha[1]
for i in range(n):
matriz.append([])
# EDIÇÂO: identei o loop abaixo -
# creio que havia uma erro de identação aqui
# ao colar o programa no stackoverflow
for j in range(p):
matriz[i].append(random.choice(string.ascii_lowercase)) #escolhe uma letras aleatorias para a matriz
def por_palavra(palavra,grelha,w):
n=tamanho_grelha[0]
p=tamanho_grelha[1]
palavra = random.choice([palavra,palavra[::-1]]) #escolher se a palavra será invertida ou não
#horizontal,vertical,diagonal
d = random.choice([[1,0],[0,1],[1,1]]) #decide o sentido da palavra
xtamanho = n if d[0] == 0 else n - len(palavra)
ytamanho = p if d[1] == 0 else p - len(palavra)
x= random.randrange(0,xtamanho)
y= random.randrange(0,ytamanho) #posição
for i in range(0,len(palavra)):
grelha[y+d[1]*i][x+d[0]*i]=palavra[i]
return grelha
def escreve_ficheiro(in_file,out_file):
leitura=open(in_file)
escrita=open(out_file,'w')
ler_ficheiro(in_file)
gerar_grelha()
escrita.write(str(len(words)) + "\n")
for i in words:
escrita.write(i + "\n")
for palavra in words:
grelha=por_palavra(palavra,matriz)
l="\n".join(map(lambda row:"".join(row),grelha))
escrita.write(l)
leitura.close()
escrita.close()
escreve_ficheiro(fi,fo) #chama a função
For example, this output:
spepvawio
ofclrmhhh
cclvlaijl
rirosrtne
finaiegom
whrzzldur
fyceaonee
ywuygelbv
clsalilyg
Note: alphabet soup (pt_EN) = wordsearch (pt_BR)
– bfavaretto
(You were right to put the rest of the code - it would not be possible to answer the question by seeing only the question
por_palavra
- even why it would not be possible to understand how the grid had been created.)– jsbueno