import streamlit as st import numpy as np import pandas as pd import random import time def generate_board(size): """Generates a Boggle board of the specified size""" letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' board = [] for i in range(size): row = [random.choice(letters) for _ in range(size)] board.append(row) return board def get_neighbors(row, col, size): """Returns a list of neighboring cells for a given cell""" neighbors = [] for i in range(max(0, row - 1), min(row + 2, size)): for j in range(max(0, col - 1), min(col + 2, size)): if i == row and j == col: continue neighbors.append((i, j)) return neighbors def search_word(word, board, visited, row, col, size): """Recursively searches for a word on the board""" if not word: return True if row < 0 or col < 0 or row >= size or col >= size: return False if visited[row][col]: return False if board[row][col] != word[0]: return False visited[row][col] = True for neighbor in get_neighbors(row, col, size): if search_word(word[1:], board, visited, neighbor[0], neighbor[1], size): return True visited[row][col] = False return False def validate_word(word, board): """Checks if a given word is valid on the board""" size = len(board) visited = [[False for _ in range(size)] for _ in range(size)] for row in range(size): for col in range(size): if search_word(word, board, visited, row, col, size): return True return False def boggle(size): """Main function for playing the Boggle game""" st.title("Boggle Game") st.write("Find as many words as possible by connecting adjacent letters on the board.") st.write("Words must be at least three letters long and can only be used once.") board = generate_board(size) board_df = pd.DataFrame(board) st.write(board_df) words = set() with st.form(key="new_word"): new_word = st.text_input("Enter a new word:") if st.form_submit_button("Submit"): if len(new_word) >= 3 and new_word not in words and validate_word(new_word.upper(), board): words.add(new_word) st.write(f"Added {new_word} to the list of words!") elif new_word in words: st.write("Word already used!") else: st.write("Invalid word. Try again.") st.write("Here are your words:") st.write(words) def boggle_old(size, time_limit): """Main function for playing the Boggle game""" st.title("Boggle Game") st.write("Find as many words as possible by connecting adjacent letters on the board within the time limit.") st.write("Words must be at least three letters long and can only be used once.") board = generate_board(size) board_df = pd.DataFrame(board) st.write(board_df) words = set() start_time = time.time() form_id = 0 with st.form(key=f"new_word_{form_id}"): new_word = st.text_input("Enter a new word:") if len(new_word) >= 3 and new_word not in words and validate_word(new_word.upper(), board): words.add(new_word) st.write(f"Added {new_word} to the list of words!") st.form_submit_button(label='Submit') form_id += 1 #while time.time() - start_time < time_limit: # st.markdown(""". # """) st.write("Here are your words:") st.write(words) # while time.time() - start_time < time_limit: # with st.form(key=f"new_word_{form_id}"): # new_word = st.text_input("Enter a new word:") # if len(new_word) >= 3 and new_word not in words and validate_word(new_word.upper(), board): # words.add(new_word) # st.write(f"Added {new_word} to the list of words!") # st.form_submit_button(label='Submit') # form_id += 1 #st.write("Time's up! Here are your words:") #st.write(words) if __name__ == "__main__": boggle(7, 60)