Skip to content

Instantly share code, notes, and snippets.

@jjballano
Created December 10, 2010 18:57
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 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
@jjballano
Copy link
Author

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á...

@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