Skip to content

A python implementation of Boggle with a focus on graph theory algorithms for efficient solving

License

Notifications You must be signed in to change notification settings

gerald-lnj/pyboggle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pyboggle

pyboggle is a implementation of the Boggle board game by Hasbro.

It features:

  • Checking and scoring for valid words in a board
  • Solving a board for all possible words
  • Doing the above in a (self-proclaimed) efficient manner

Quick Start

from pyboggle import BoggleBoard
board = BoggleBoard()
board.start_game()

Approach

There are 2 main aspects to this implementation of Boggle: the WordTree wordlist, and the BoggleBoard board itself.

BoggleBoard

The BoggleBoard class represents each postion on the board with a Dice instance. It also stores the relative positions of the dice in an undirected adjacency graph, where each node in the graph is a Dice instance.

This graph is used to check if a guess attempt is possible on this board, by asserting that the chain of letters exists as a path on the adjacency graph.

It is also used to execute a depth first search (DFS) of all paths between every combination of dice, to get all posiible words on the board.

This exahustive search is optimised by checking the current traversed path aginst the word list, and early exiting the current branch if the partial word is invalid.

WordTree

The WordTree word list is constucted from the CSW15 set of words in a .txt format. A prefix tree is constructed from this word list, which allows for quick searching, and early exiting of the DFS search.

Creation of the prefix tree is further optimised by excluding all words which contain letters not present in the current BoggleBoard layout.

About

A python implementation of Boggle with a focus on graph theory algorithms for efficient solving

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages