Skip to content

Instantly share code, notes, and snippets.

@alberto
Created January 5, 2011 16:59
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 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
@jjballano
Copy link

No me termina de gustar lo de meter return entre medias de un método (y es un recurso que yo mismo uso de vez en cuando...

@xaviuzz
Copy link

xaviuzz commented Jan 5, 2011

Yo digo NO a los ternarios, no preguntes por que; que te pones en evidencia

@alberto
Copy link
Author

alberto commented Jan 5, 2011

que si no a los returns, que si no a los ternarios, cobardes! :P

@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