From 0571f250b07981d96226350aa3e19150f7ec1a40 Mon Sep 17 00:00:00 2001 From: Tait Hoyem Date: Sun, 28 Aug 2022 18:22:42 -0600 Subject: [PATCH] Initial commit --- .gitignore | 1 + Makefile | 5 ++++ README.md | 25 ++++++++++++++++++++ roll | Bin 0 -> 21136 bytes roll.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100755 roll create mode 100644 roll.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..02eb5e2 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +CC_FLAGS := -O2 -Wall -std=c99 +PLATFORM := linux # supports windows, macos + +default: + $(CC) $(CC_FLAGS) -DPLATFORM=$(PLATFORM) -o roll roll.c diff --git a/README.md b/README.md new file mode 100644 index 0000000..aadfe77 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# `roll` + +Basic di(c)e roller utility. + +## Usage + +Supports basic roll functionality for standard any set of dice and their sides. +You *must* always include both a number of dice and the sides of the dice. + +```bash +$ roll 5d2 +6 +``` + +By default, the sum of the rolls will be printed out on the terminal. + +## Options + +THE OPTIONS DO NOT WORK AT THIS TIME. + +* `-a` -- `--all` + * Show a list of all roles instead of the sum (overrides default behaviour). +* `-s` -- `--sum` + * Show the sum of all roles. This may be combined with other options. + diff --git a/roll b/roll new file mode 100755 index 0000000000000000000000000000000000000000..9bd87c89e315be2a6be195d3d21fe9c57b9f415e GIT binary patch literal 21136 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 W*0Q{Atfqf@mn*^R?ebJXivI@NVh{QN literal 0 HcmV?d00001 diff --git a/roll.c b/roll.c new file mode 100644 index 0000000..37a49a7 --- /dev/null +++ b/roll.c @@ -0,0 +1,68 @@ +#include +#include +#include +#include + +enum Flags { + LIST_ALL = 0x1, + SHOW_SUM = 0x2, +}; + +unsigned int roll_one(unsigned int sides) { + return (rand() % sides) + 1; +} + +void roll(unsigned int sides, unsigned int num_rolls, unsigned int* buffer) { + for (unsigned int i = 0; i < num_rolls; i++) { + buffer[i] = roll_one(sides); + } +} + +int read_roll(const char* arg, unsigned int* sides, unsigned int* num_rolls) { + return sscanf(arg, "%ud%u", num_rolls, sides); +} + +int main(int argc, char** argv) { + if (argc != 2) { + printf("You must provide exactly one argument.\n"); + exit(1); + } + unsigned int sides, num_rolls; + time_t t; + if (!read_roll(argv[1], &sides, &num_rolls)) { + printf("Invalid arguments! Must be of format d, where N is the number of dice to roll and is the sides on the die.\n"); + exit(2); + } + enum Flags flags = 0x0; + for (int argi = 0; argi < argc; argi++) { + if (strcmp(argv[argi], "-s") || + strcmp(argv[argi], "--sum")) { + flags |= SHOW_SUM; + } else if (strcmp(argv[argi], "-a") || + strcmp(argv[argi], "--all")) { + flags |= LIST_ALL; + } + } + // default if no arguments supplied: show only the sum + if (flags == 0x0) { + flags |= SHOW_SUM; + } + unsigned int rolls[256] = {0}; + // seed random number generator + srand((unsigned) time(&t)); + + roll(sides, num_rolls, rolls); + unsigned int sum = 0; + for (unsigned int i = 0; i < num_rolls; i++) { + sum += rolls[i]; + if ((flags & LIST_ALL) == LIST_ALL) { + printf("%u", rolls[i]); + if (i == num_rolls-1) { + printf("\n"); + } + } + } + if ((flags & SHOW_SUM) == SHOW_SUM) { + printf("%u\n", sum); + } +}