Spaces:
Build error
Build error
import streamlit as st | |
import random | |
import string | |
# Define constants | |
SIZE = 10 | |
WORDS_FILE = "words.txt" | |
# Define helper functions | |
def generate_grid(size): | |
grid = [] | |
for i in range(size): | |
row = [random.choice(string.ascii_uppercase) for j in range(size)] | |
grid.append(row) | |
return grid | |
def add_words_to_grid(words, grid): | |
for word in words: | |
added = False | |
while not added: | |
direction = random.choice(["horizontal", "vertical", "diagonal"]) | |
if direction == "horizontal": | |
row = random.randint(0, len(grid)-1) | |
col = random.randint(0, len(grid[0])-len(word)) | |
if all(grid[row][col+j] == "" or grid[row][col+j] == word[j] for j in range(len(word))): | |
for j in range(len(word)): | |
grid[row][col+j] = word[j] | |
added = True | |
elif direction == "vertical": | |
row = random.randint(0, len(grid)-len(word)) | |
col = random.randint(0, len(grid[0])-1) | |
if all(grid[row+j][col] == "" or grid[row+j][col] == word[j] for j in range(len(word))): | |
for j in range(len(word)): | |
grid[row+j][col] = word[j] | |
added = True | |
elif direction == "diagonal": | |
row = random.randint(0, len(grid)-len(word)) | |
col = random.randint(0, len(grid[0])-len(word)) | |
if all(grid[row+j][col+j] == "" or grid[row+j][col+j] == word[j] for j in range(len(word))): | |
for j in range(len(word)): | |
grid[row+j][col+j] = word[j] | |
added = True | |
return grid | |
# Define Streamlit app | |
def app(): | |
st.title("Word Search") | |
# Load words from file or user input | |
if st.sidebar.button("Load words"): | |
with open(WORDS_FILE, "r") as f: | |
words = [word.strip() for word in f.readlines()] | |
else: | |
words_input = st.sidebar.text_area("Enter words (one per line)") | |
words = [word.strip() for word in words_input.split("\n")] | |
# Save words to file | |
if st.sidebar.button("Save words"): | |
with open(WORDS_FILE, "w") as f: | |
for word in words: | |
f.write(word + "\n") | |
# Generate and display word search | |
if words: | |
grid = generate_grid(SIZE) | |
grid = add_words_to_grid(words, grid) | |
st.write("Find the following words:") | |
st.write(words) | |
for row in grid: | |
st.write(" ".join(row)) | |
else: | |
st.write("Enter words to generate a word search.") | |