File size: 2,558 Bytes
b73f288
 
 
 
f6c6d15
 
b73f288
 
 
f6c6d15
b73f288
 
f6c6d15
b73f288
 
 
 
f6c6d15
b73f288
f6c6d15
 
b73f288
 
 
f6c6d15
 
b73f288
 
f6c6d15
b73f288
f6c6d15
b73f288
 
f6c6d15
b73f288
 
f6c6d15
b73f288
 
f6c6d15
 
b73f288
 
f6c6d15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1bb7250
 
 
 
 
d2def29
f6c6d15
 
 
 
 
b73f288
87cfa09
 
f6c6d15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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()