Skip to content

Instantly share code, notes, and snippets.

@alberto
Created December 20, 2010 00:47
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/747881 to your computer and use it in GitHub Desktop.
Save alberto/747881 to your computer and use it in GitHub Desktop.
implementation of about_scoring_project ruby koan
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
@plagelao
Copy link

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

@alberto
Copy link
Author

alberto commented Dec 20, 2010

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