Skip to content

Instantly share code, notes, and snippets.

@jjballano
Created December 10, 2010 18:57
Show Gist options
  • Save jjballano/736614 to your computer and use it in GitHub Desktop.
Save jjballano/736614 to your computer and use it in GitHub Desktop.
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
@kinisoftware
Copy link

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