Created
November 3, 2008 20:28
-
-
Save caironoleto/21971 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
# CAPITULO 5 - http://why.nomedojogo.com/chapter-5.html | |
# 5. O Roubo do Capitão Loteria | |
# OBS: Alguém poderia me explicar? | |
########################################################################################################## | |
elsif numeros_escolhidos.detect { |p| not INTERVALO_NUMERICO === p } | |
raise ArgumentError, "os três escolhidos devem ser números entre 1 e 25." | |
end | |
# Dúvida: o que o .detect faz? e como eu leria esse trecho de código? { |p| not INTERVALO_NUMERICO === p } | |
# detect é um método da classe Array ele busca se o elemento está ou não no array. Você ler o código assim: | |
# Você poder ler a linha assim Se P não está no INTERVALO_NUMERICO, o === em range retorna verdadeiro se está no intervalo | |
# você pode olhar aqui http://www.ruby-doc.org/core/classes/Range.html#M000704 | |
########################################################################################################## | |
class MeuArray < Array | |
# Contruir uma string neste array, formatando cada entrada | |
# e depois as unindo. | |
def join( sep = $,, format = "%s" ) | |
collect do |item| | |
sprintf( format, item ) | |
end.join( sep ) | |
end | |
end | |
# bem o que esse metodo join faz? e o que são esses $ %s %d? | |
# o $ é uma variavel global e o %d é o formatador do método sprintf, onde o d é "Convert argument as a decimal number." | |
########################################################################################################## | |
class SorteioLoteria | |
@@bilhetes = {} | |
def SorteioLoteria.comprado_por( cliente, *bilhetes ) | |
unless @@bilhetes.has_key?( cliente ) | |
@@bilhetes[cliente] = [] | |
end | |
@@bilhetes[cliente] += bilhetes | |
end | |
end | |
# Bem eu tenho uma váriavel de classe bilhetes, o metodo SorteioLoteria.comprado_por cliente, *bilhetes, | |
# entedi vou ter um cliente e ele pode ter um array com vários bilhetes comprados. | |
# bem como eu leria: unless @@bilhetes.has_key?( cliente ) has_key? o que é isso? | |
# isso é um Se, você leria assim: Exceto se bilhetes possuir uma chave cliente | |
# o has_key é um método de hashs, retorna verdaeiro se possuir tal palavra como key http://www.ruby-doc.org/core/classes/Hash.html#M002911 | |
# eu sei que no unless ali abaixo se for zerado o array do cliente ele inicia, se não ele fica adicionando. | |
########################################################################################################## | |
class BilheteLoteria | |
def pontuacao( final ) | |
contador = 0 | |
final.numeros_escolhidos.each do |nota| | |
contador += 1 if numeros_escolhidos.include? nota | |
end | |
contador | |
end | |
end | |
# bem o que seria essa variável final? e o que esse bloco do each faz? | |
# final é passado por parametro, então final assume o que for chamado no método | |
# o each navega, é um loop, no caso, leria-se Para cada numero escolhido de final assuma nota | |
########################################################################################################## | |
class << SorteioLoteria | |
def jogo | |
final = BilheteLoteria.novo_aleatorio | |
vencedores = {} | |
@@bilhetes.each do |comprador, lista_bilhetes| | |
lista_bilhetes.each do |bilhete| | |
pontuacao = bilhete.pontuacao( final ) | |
next if pontuacao.zero? | |
vencedores[comprador] ||= [] | |
vencedores[comprador] << [ bilhete, pontuacao ] | |
end | |
end | |
@@bilhetes.clear | |
vencedores | |
end | |
end | |
# não entendi porque SorteioLoteria (<<) de class. bem nesse each seria cliente e bilhetes? em vez de comprador, lista_bilhetes. | |
# Aqui ele adiciona direto na Class class, no caso seria para todo os objetos. | |
# não entendi muito bem o que esse each mais interno faz... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment