mirror of
https://codeberg.org/cblanken/boggler.git
synced 2026-07-26 03:29:26 -04:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a611f4a7e7 | ||
|
|
e183ce07c0 | ||
|
|
09e6f4a672 |
@@ -18,7 +18,7 @@ To use the script to solve a Boggle board, you'll need to do a few things first.
|
|||||||
d,f,e,y
|
d,f,e,y
|
||||||
n,m,e,qu
|
n,m,e,qu
|
||||||
```
|
```
|
||||||
2. Find or create a dictionary wordlist file or create your own
|
2. Find or create a dictionary wordlist file
|
||||||
|
|
||||||
The dictionary wordlist should have each word on a single line like so
|
The dictionary wordlist should have each word on a single line like so
|
||||||
```console
|
```console
|
||||||
@@ -44,7 +44,7 @@ To use the script to solve a Boggle board, you'll need to do a few things first.
|
|||||||
|
|
||||||
3. Split the dictionary wordlist into separate files based on the first letter of each word.
|
3. Split the dictionary wordlist into separate files based on the first letter of each word.
|
||||||
|
|
||||||
To split an English wordlist the `split_wordlist_alpha.sh` script can be used like so:
|
To split an English wordlist, use the `split_wordlist_alpha.sh` script like so:
|
||||||
```console
|
```console
|
||||||
$ split_wordlist_alpha.sh my_wordlist.txt .
|
$ split_wordlist_alpha.sh my_wordlist.txt .
|
||||||
```
|
```
|
||||||
@@ -97,7 +97,6 @@ BOARD
|
|||||||
+---------------+
|
+---------------+
|
||||||
| O | W | H | A |
|
| O | W | H | A |
|
||||||
+---------------+
|
+---------------+
|
||||||
|
|
||||||
Starting @ (0, 0)
|
Starting @ (0, 0)
|
||||||
╭──────────┬──────────────────────────────────────────────────────────────────╮
|
╭──────────┬──────────────────────────────────────────────────────────────────╮
|
||||||
│ Word │ Path │
|
│ Word │ Path │
|
||||||
@@ -142,8 +141,7 @@ BOARD
|
|||||||
│ aia │ [(0, 1), (0, 2), (1, 2)] │
|
│ aia │ [(0, 1), (0, 2), (1, 2)] │
|
||||||
│ aias │ [(0, 1), (0, 2), (1, 2), (2, 3)] │
|
│ aias │ [(0, 1), (0, 2), (1, 2), (2, 3)] │
|
||||||
╰────────┴──────────────────────────────────────────────────╯
|
╰────────┴──────────────────────────────────────────────────╯
|
||||||
Starting @ (0,
|
Starting @ (0,2)
|
||||||
2)
|
|
||||||
╭──────┬──────╮
|
╭──────┬──────╮
|
||||||
│ Word │ Path │
|
│ Word │ Path │
|
||||||
├──────┼──────┤
|
├──────┼──────┤
|
||||||
@@ -254,8 +252,7 @@ Starting @ (0,
|
|||||||
│ yap │ [(1, 3), (1, 2), (0, 3)] │
|
│ yap │ [(1, 3), (1, 2), (0, 3)] │
|
||||||
│ yas │ [(1, 3), (1, 2), (2, 3)] │
|
│ yas │ [(1, 3), (1, 2), (2, 3)] │
|
||||||
╰──────┴──────────────────────────╯
|
╰──────┴──────────────────────────╯
|
||||||
Starting @ (2,
|
Starting @ (2, 0)
|
||||||
0)
|
|
||||||
╭──────┬──────╮
|
╭──────┬──────╮
|
||||||
│ Word │ Path │
|
│ Word │ Path │
|
||||||
├──────┼──────┤
|
├──────┼──────┤
|
||||||
@@ -391,4 +388,4 @@ Navigate to the project root folder and run the following.
|
|||||||
Run `poetry build`
|
Run `poetry build`
|
||||||
|
|
||||||
# License
|
# License
|
||||||
The included [wordlists](src/boggler/wordlists) are covered by their respective licenses. All other files MIT © Cameron Blankenbuehler
|
The included [wordlists](boggler/wordlists) are covered by their respective licenses. All other files [MIT](LICENSE) © Cameron Blankenbuehler
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
"""Module to generate random Boggle boards for testing"""
|
"""Module to generate random Boggle boards for testing"""
|
||||||
|
|
||||||
from sys import argv, stderr
|
from sys import argv, stderr
|
||||||
from random import randint, shuffle
|
from random import randint, shuffle
|
||||||
from math import sqrt, floor
|
from math import sqrt, floor
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import List, TypeAlias
|
||||||
|
|
||||||
|
|
||||||
|
Die: TypeAlias = List[str]
|
||||||
|
Dice: TypeAlias = List[Die]
|
||||||
|
|
||||||
|
|
||||||
def read_dice_file(dice_path: Path):
|
def read_dice_file(dice_path: Path):
|
||||||
@@ -11,17 +17,17 @@ def read_dice_file(dice_path: Path):
|
|||||||
return [line.rstrip().split(",") for line in file.readlines() if line[0] != "#"]
|
return [line.rstrip().split(",") for line in file.readlines() if line[0] != "#"]
|
||||||
|
|
||||||
|
|
||||||
def roll_die(die: str):
|
def roll_die(die: Die):
|
||||||
"""Return a face of the given die string to simulate rolling a die"""
|
"""Return a face of the given die string to simulate rolling a die"""
|
||||||
return str(die[randint(0, len(die) - 1)])
|
return str(die[randint(0, len(die) - 1)])
|
||||||
|
|
||||||
|
|
||||||
def roll_dice(dice: list[str]):
|
def roll_dice(dice: Dice):
|
||||||
"""Return a random roll for each die"""
|
"""Return a random roll for each die"""
|
||||||
return [roll_die(die) for die in dice]
|
return [roll_die(die) for die in dice]
|
||||||
|
|
||||||
|
|
||||||
def get_random_board(dice: list[str]):
|
def get_random_board(dice: Dice):
|
||||||
shuffle(dice)
|
shuffle(dice)
|
||||||
rolls = roll_dice(dice)
|
rolls = roll_dice(dice)
|
||||||
|
|
||||||
@@ -33,7 +39,7 @@ def get_random_board(dice: list[str]):
|
|||||||
return board
|
return board
|
||||||
|
|
||||||
|
|
||||||
def get_random_board_csv(dice: list[str]):
|
def get_random_board_csv(dice: Dice):
|
||||||
board = get_random_board(dice)
|
board = get_random_board(dice)
|
||||||
board = [",".join(row) for row in board]
|
board = [",".join(row) for row in board]
|
||||||
return board
|
return board
|
||||||
@@ -49,4 +55,4 @@ if __name__ == "__main__":
|
|||||||
for r in range(0, int(floor(sqrt(len(dice))))):
|
for r in range(0, int(floor(sqrt(len(dice))))):
|
||||||
print(board[r])
|
print(board[r])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("Argument must be a valid file path!", file=stderr)
|
print("Argument must be a valid file path.", file=stderr)
|
||||||
|
|||||||
Reference in New Issue
Block a user