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()