cmd: add die roller
This commit is contained in:
		
							parent
							
								
									4cb6f5b6f0
								
							
						
					
					
						commit
						e68d22337b
					
				| 
						 | 
				
			
			@ -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))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue