Created
December 20, 2010 00:47
-
-
Save alberto/747881 to your computer and use it in GitHub Desktop.
implementation of about_scoring_project ruby koan
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def score(dice) | |
return score_for_each_die(dice) + score_for_sets_of_three(dice) | |
end | |
def score_for_each_die(dice) | |
dice.inject(0) do |sum, die| | |
sum + score_for(die) | |
end | |
end | |
def score_for die | |
return 100 if die == 1 | |
return 50 if die == 5 | |
return 0 | |
end | |
def score_for_sets_of_three(dice) | |
(1..6).inject(0) do |sum, value| | |
sum + score_for_sets_of_three_of(value, dice) | |
end | |
end | |
def score_for_sets_of_three_of value, dice | |
number_of_sets = number_of_sets_of_three_for value, dice | |
score_for_a_set = score_for_a_set_of value | |
return number_of_sets * score_for_a_set | |
end | |
SCORE_FOR_A_SET_OF_THREE = { 1 => 700, 2 => 200, 3 => 300, 4 => 400, 5 => 350, 6 => 600 } | |
def score_for_a_set_of value | |
return SCORE_FOR_A_SET_OF_THREE[value] | |
end | |
def number_of_sets_of_three_for value, dice | |
times_repeated = dice.find_all { |die| die == value }.size | |
groups_of_three = times_repeated / 3 | |
end |
Gracias por el comentario, lo primero.
Entiendo lo que dices, pero no sé si lo comparto. No creo que el código trate de ser demasiado "listo". Es simplemente una implementación algo diferente, lo cual no me parece relevante. Si los tests pasan y el código es simple... ¿dónde está el problema?
Otra cosa es que este código no funcione con el juego completo (acabo de leerlo hoy) donde se van quitando dados...
Un saludo
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Por un momento he pensado que la implementación no funcionaba :P Luego he visto el 700 cuando tienes 3 unos. No veas si es listo el algoritmo :P
Una de las cosas que estoy aprendiendo ultimamente es a no hacer código listo (En realidad, todavía no la he aprendido. Yo lo intento, pero es difícil) porque luego no es claro (más o menos lo que me ha pasado a mi leyendo el tuyo).
Un saludo