18 lines
500 B
Racket
18 lines
500 B
Racket
#lang racket
|
|
|
|
(define (d6 . _)
|
|
(+ (random 6) 1))
|
|
|
|
(define (best-3-of-4d6 . _)
|
|
(apply + (rest (sort (build-list 4 d6) <))))
|
|
|
|
(define (generate-character)
|
|
(let* ((rolls (build-list 6 best-3-of-4d6))
|
|
(total (apply + rolls)))
|
|
(if (or (< total 75) (< (length (filter (curryr >= 15) rolls)) 2))
|
|
(generate-character)
|
|
(values rolls total))))
|
|
|
|
(module+ main
|
|
(define-values (rolled-stats total) (generate-character))
|
|
(printf "Rolls:\t~a~%Total:\t~a" rolled-stats total))
|