Skip to content

Instantly share code, notes, and snippets.

@alberto
Created January 5, 2011 16:59
Show Gist options
  • Save alberto/766590 to your computer and use it in GitHub Desktop.
Save alberto/766590 to your computer and use it in GitHub Desktop.
Correcciones de greed para xaviuzz
def score(dice)
compute_singles(dice) + compute_triples(dice)
end
def compute_singles(diceRoll)
diceRoll.each.inject(0) {|result, roll| result + single_value(roll) }
end
SINGLE_VALUES = { 1 => 100 , 5 => 50}
def single_value(roll)
SINGLE_VALUES.keys.include?(roll) ? SINGLE_VALUES[roll] : 0
end
def compute_triples(diceRoll)
(1..6).each.inject(0) { |result, roll| result + calculate_triple_score(diceRoll, roll)}
end
TRIPLE_FACTOR = 100
SPECIAL_TRIPLE_SCORES = {1=>1000}
def calculate_triple_score(diceRoll, points)
ocurrences = diceRoll.count(points)
return 0 if (ocurrences < 3)
score_for_a_set_of_three(points) - score_of_triple_as_singles(points)
end
def score_for_a_set_of_three points
SPECIAL_TRIPLE_SCORES.keys.include?(points) ? SPECIAL_TRIPLE_SCORES[points] : ( points * TRIPLE_FACTOR )
end
def score_of_triple_as_singles(points)
single_value(points) * 3
end
@alberto
Copy link
Author

alberto commented Jan 5, 2011

Sobre el return, si te quedas más tranquilo poniéndole un nombre, es un patrón guard clause de toda la vida de dios.

@jjballano
Copy link

Los ternarios a mi me convencen pero dependiendo de lo que venga antes o después. Si puedo leerlo de principio a fin como si fuera lenguaje natural sí, la verdad es que devolviendo como en este caso la posición de un array tampoco me termina de convencer, pero algo más que un if X then Y else Z

@jjballano
Copy link

No tienen por qué gustarme todos los patrones :) Con nombre o sin él, a mi personalmente no me convence, y ya digo que lo hago de vez en cuando (si no encuentro otra forma más limpia)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment