I think I was explicit. The size of the grid is given in a .txt file in the first line and then the words that I should put in the generated font soup. The problem is that when I make the soup the words coincide in their positions which is not what is intended. Someone can help me? The function that matters is the word_name. I just put the rest of the code to understand it 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