From 96da732dd94cf7ba63d17d8ff5ae52cec1499722 Mon Sep 17 00:00:00 2001 From: Cameron Blankenbuehler Date: Tue, 20 Sep 2022 15:49:13 -0400 Subject: [PATCH] Update board_randomizer module - Fix typo: randimizer to randomizer - Add module function to get direct 2d array of board values --- src/boggler/board_randimizer.py | 31 --------------------- src/boggler/board_randomizer.py | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 31 deletions(-) delete mode 100755 src/boggler/board_randimizer.py create mode 100755 src/boggler/board_randomizer.py diff --git a/src/boggler/board_randimizer.py b/src/boggler/board_randimizer.py deleted file mode 100755 index d91aba4..0000000 --- a/src/boggler/board_randimizer.py +++ /dev/null @@ -1,31 +0,0 @@ -'''Module to generate random Boggle boards for testing''' -from sys import argv -from random import randint, shuffle -from math import sqrt - -def read_dice_file(path): - # TODO: Factor in 'qu' die face - '''Return list of die strings from file ignoring all comments (#)''' - with open(path, 'r+', encoding="utf-8") as file: - return [line.rstrip().split(',') for line in file.readlines() if line[0] != "#"] - -def roll_die(die: str): - '''Return a face of the given die string to simulate rolling a die''' - return str(die[randint(0, len(die) - 1)]) - -def roll_dice(dice: list[str]): - '''Return a random roll for each die''' - return [ roll_die(die) for die in dice ] - -if __name__ == '__main__': - if len(argv) != 2: - print('Usage: python3 board_randomizer.py ') - else: - dice_strings = read_dice_file(argv[1]) - shuffle(dice_strings) - rolls = roll_dice(dice_strings) - - # Format dice rolls for boards file - board_size = int(sqrt(len(rolls))) - for i in range(0, len(dice_strings), board_size): - print(",".join(rolls[i:i+board_size])) diff --git a/src/boggler/board_randomizer.py b/src/boggler/board_randomizer.py new file mode 100755 index 0000000..0377646 --- /dev/null +++ b/src/boggler/board_randomizer.py @@ -0,0 +1,48 @@ +'''Module to generate random Boggle boards for testing''' +from sys import argv, stderr +from random import randint, shuffle +from math import sqrt +from os import path + +def read_dice_file(path): + '''Return list of die strings from file ignoring all comments (#)''' + with open(path, 'r+', encoding="utf-8") as file: + return [line.rstrip().split(',') for line in file.readlines() if line[0] != "#"] + +def roll_die(die: str): + '''Return a face of the given die string to simulate rolling a die''' + return str(die[randint(0, len(die) - 1)]) + +def roll_dice(dice: list[str]): + '''Return a random roll for each die''' + return [ roll_die(die) for die in dice ] + +def get_random_board(dice_path): + dice_strings = read_dice_file(dice_path) + shuffle(dice_strings) + rolls = roll_dice(dice_strings) + + # Format dice rolls for boards file + board_size = int(sqrt(len(rolls))) + board = [] + for i in range(0, len(dice_strings), board_size): + board.append(rolls[i:i+board_size]) + return board + +def get_random_board_csv(dice_path): + board = get_random_board(dice_path) + board = [",".join(row) for row in board] + return board + +if __name__ == '__main__': + if len(argv) != 2: + print('Usage: python3 board_randomizer.py ') + else: + try: + board = get_random_board_csv(path.abspath(argv[1])) + for row in board: + print(row) + except Exception as e: + print("Argument must be a valid file path!", file=stderr) + +