diff --git a/cmd/rolldie/main.go b/cmd/rolldie/main.go new file mode 100644 index 0000000..b1ce3af --- /dev/null +++ b/cmd/rolldie/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "flag" + "fmt" + "math/rand" + "os" + "regexp" + "strconv" + + "git.wntrmute.dev/kyle/goutils/die" +) + +var dieRollFormat = regexp.MustCompile(`^(\d+)[dD](\d+)$`) + +func rollDie(count, sides int) []int { + sum := 0 + var rolls []int + + for i := 0; i < count; i++ { + roll := rand.Intn(sides) + 1 + sum += roll + rolls = append(rolls, roll) + } + + rolls = append(rolls, sum) + return rolls +} + +func main() { + flag.Parse() + + for _, arg := range flag.Args() { + if !dieRollFormat.MatchString(arg) { + fmt.Fprintf(os.Stderr, "invalid die format %s: should be XdY\n", arg) + os.Exit(1) + } + + dieRoll := dieRollFormat.FindAllStringSubmatch(arg, -1) + count, err := strconv.Atoi(dieRoll[0][1]) + die.If(err) + + sides, err := strconv.Atoi(dieRoll[0][2]) + die.If(err) + + fmt.Println(rollDie(count, sides)) + } +}