Skip to content

Instantly share code, notes, and snippets.

@aep
Created November 23, 2014 04:41
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 aep/5f237926a0841e4550d7 to your computer and use it in GitHub Desktop.
Save aep/5f237926a0841e4550d7 to your computer and use it in GitHub Desktop.
# someone posted their homework on #ruby with a terrible answer from some blog
# challenge accepted, so here's my answer (didn't spoiler them tho ;)
# 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.
def score(d)
d.group_by {|x|x}.map do |k,v|
v = v.count
sc = (v / 3) * (k == 1 ? 1000 : k * 100)
sc += 100 * (v % 3) if k == 1
sc += 50 * (v % 3) if k == 5
sc
end.reduce(:+)
end
p score([1,1,1,5,1])
p score([2,3,4,6,2])
p score([3,4,5,3,3])
p score([1,5,1,2,4])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment