Spaces:
Build error
Build error
import streamlit as st | |
import random | |
import string | |
BOARD_SIZE = 15 | |
WORDS_FILE = "word_list.txt" | |
def load_word_list(): | |
try: | |
with open(WORDS_FILE, "r") as f: | |
words = f.read().split("\n") | |
except FileNotFoundError: | |
words = [] | |
st.text_area("Enter a list of words (one per line)", "\n".join(words), key="words_area") | |
st.sidebar.subheader("Word List:") | |
for i, word in enumerate(words): | |
st.sidebar.write(f"{i+1}. {word}") | |
return words | |
def save_word_list(words): | |
with open(WORDS_FILE, "w") as f: | |
f.write("\n".join(words)) | |
st.write("Word list saved successfully!") | |
def generate_board(words): | |
board = [[' ' for _ in range(BOARD_SIZE)] for _ in range(BOARD_SIZE)] | |
for word in words: | |
word = word.upper() | |
row, col = random.randint(0, BOARD_SIZE - 1), random.randint(0, BOARD_SIZE - 1) | |
direction = random.choice(['horizontal', 'vertical', 'diagonal']) | |
if direction == 'horizontal' and col + len(word) <= BOARD_SIZE: | |
for i, letter in enumerate(word): | |
board[row][col+i] = letter | |
elif direction == 'vertical' and row + len(word) <= BOARD_SIZE: | |
for i, letter in enumerate(word): | |
board[row+i][col] = letter | |
elif direction == 'diagonal' and row + len(word) <= BOARD_SIZE and col + len(word) <= BOARD_SIZE: | |
for i, letter in enumerate(word): | |
board[row+i][col+i] = letter | |
for i in range(BOARD_SIZE): | |
for j in range(BOARD_SIZE): | |
if board[i][j] == ' ': | |
board[i][j] = random.choice(string.ascii_uppercase) | |
return board | |
def display_word_list(words): | |
st.sidebar.subheader("Word List:") | |
for i, word in enumerate(words): | |
st.sidebar.write(f"{i+1}. {word}") | |
def display_board(board): | |
st.write("Word Search Board:") | |
st.table(board) | |
def paste_story(): | |
story = st.text_area("Paste your story here") | |
if st.button("Build Word List"): | |
words = [word.upper() for word in story.split() if len(word) > 4] | |
try: | |
with open(WORDS_FILE, "r") as f: | |
existing_words = set(f.read().split("\n")) | |
except FileNotFoundError: | |
existing_words = set() | |
words = list(set(words) - existing_words) | |
words = sorted(words, key=len, reverse=True)[:10] | |
save_word_list(words) | |
board = generate_board(words) | |
display_word_list(words) | |
display_board(board) | |
words = load_word_list() | |
display_word_list(words) | |
paste_story() | |