Skip to content

Instantly share code, notes, and snippets.

/halp.lsp Secret

Created February 21, 2018 01:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/8bb69443310145f0da82273a9f1a397b to your computer and use it in GitHub Desktop.
Save anonymous/8bb69443310145f0da82273a9f1a397b to your computer and use it in GitHub Desktop.
greed scorer
; *Greed* is a dice game where you roll up to five dice to accumulate
; points. The following "score" function will be used to calculate the
; score of a single roll of the dice.
;
; A greed roll is scored as follows:
;
; * A set of three ones is 1000 points
;
; * A set of three numbers (other than ones) is worth 100 times the
; number. (e.g. three fives is 500 points).
;
; * A one (that is not part of a set of three) is worth 100 points.
;
; * A five (that is not part of a set of three) is worth 50 points.
;
; * Everything else is worth 0 points.
;
;
; Examples:
;
; (score '(1 1 1 5 1)) => 1150 points
; (score '(2 3 4 6 2)) => 0 points
; (score '(3 4 5 3 3)) => 350 points
; (score '(1 5 1 2 4)) => 250 points
;
; More scoring examples are given in the tests below:
;
; Your goal is to write the score method.
(defun score (dice)
(let ((count-1 0)
(count-5 0)
(score 0))
(dolist (roll dice)
(cond
((= roll 1) (incf count-1))
((= roll 5) (incf count-5))))
(setf score (+ score (* 1000 (truncate (/ count-1 3))) (* 100 (mod count-1 3))))
(setf score (+ score (* 500 (truncate (/ count-5 3))) (* 50 (mod count-5 3)))))
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment