## Thursday, April 7, 2011

### Ruby Koans: Greed Dice Game

I was working on the Greed dice game in the Ruby Koans. My goal was to come up with an algorithm that was elegant, readable, and rubyesque. This is what I came up with:

```def score(dice)
score = 0
points = Hash.new(0)
points[1] = 100
points[5] = 50

counts = Hash.new(0)
dice.each { |number| counts[number] += 1 }

counts.each do |number, count|
if count >= 3
if number == 1
score += 1000
else
score += (number * 100)
end
count = count - 3
end

score += points[number] * count
end

score
end

```

If you're not familiar with the ruby koans, here's the link to the path of enlightenment: Ruby koans

1. You can use `inject` to load the hash and a case statement to iterate through the possible die sides:

def score(dice)
tally = 0

return tally if dice.length == 0

hash = dice.inject(Hash.new(0)) { |h,v| h[v] += 1; h }

(1..6).collect do |roll|
case roll
when 5
tally += (hash[roll] / 3) * 500 + (hash[roll] % 3) * 50
when 1
tally += (hash[roll] / 3) * 1000 + (hash[roll] % 3) * 100
else
tally += (hash[roll] / 3) * roll * 100
end
end

ap "dice = #{dice}, " + "hash = #{hash}, " + "tally = #{tally}"

tally
end

2. Hi dear, I like your post so much, and it is very good. Hope that we can communicate with each other. I want to introduce an aso services, I try it and I feel it is so good to us beginners.

3. This was really interesting info in this blog that to very happy for the nice technology in this blog. best live gambling

4. Thanks for sharing your innovative ideas to our vision. I have read your blog and I gathered some new information through your blog. Your blog is really very informative and unique. Keep posting like this. Awaiting for your further update.If you are looking for any Data science related information, please visit our website Data science training institute in bangalore

5. Must needed article very helpful..Keep posting many more.

professional web design services

6. Nice post.Thanks for sharing your valuable information and SEO tips

home building construction contractors