Created
December 10, 2010 18:57
-
-
Save jjballano/736614 to your computer and use it in GitHub Desktop.
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
SCORE_OF = {1=>100, 2=>0, 3=>0, 4=>0, 5=>50, 6=>0} | |
SCORE_OF_A_SET_OF_THREE = {1=>1000, 2=>200, 3=>300, 4=>400, 5=>500, 6=>600} | |
def score(dice) | |
score = 0 | |
(1..6).each{ |number| | |
score += score_of_set_of(number, dice) | |
} | |
return score | |
end | |
def score_of_set_of(number, dice) | |
score = 0 | |
score += score_of_sets_of_three(number, dice) | |
score += score_of_set_of_less_than_three(number, dice) | |
return score | |
end | |
def number_of(number, dice) | |
return dice.select { |element| element == number}.size | |
end | |
def score_of_sets_of_three(number, dice) | |
return SCORE_OF_A_SET_OF_THREE[number] * number_of_sets_of_three(number_of(number,dice)) | |
end | |
def score_of_set_of_less_than_three(number, dice) | |
return SCORE_OF[number] * number_of_no_set_of_three(number_of(number, dice)) | |
end | |
def number_of_sets_of_three(number_of_elements) | |
number_of_elements / 3 | |
end | |
def number_of_no_set_of_three(number_of_elements) | |
number_of_elements % 3 | |
end |
Yay! Me gusta más este código! :D
Es cierto lo del "dice", realmente es una "throw" (tirada... que lo pone en el diccionario mayormente :P). Igual así se puede sacar más semántica, quizás cada tirada está formada por "diceside" o "dicevalue"... podría no hacerse como una clase claro pero entonces no estamos siendo todo lo orientado a objetos que podríamos ;) (esto lo aprendí bien en el curso de TDD con Alejandro, no había primitivos salvo en las clases más bajas, en este caso DiceSide tiene un primitivo "value" :))
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
De todas formas, estoy viendo que hay algo que no cambié porque venía así, pero es que venía mal... en el método score, el parámetro se llama "dice" cuando realmente no es un dado, es el resultado de haber lanzado el dado X veces... seguramente cambiando eso ya vea mejor como meter una clase Dice o DiceSide o ya se verá...