Skip to content

Instantly share code, notes, and snippets.

@caironoleto
Created November 3, 2008 20:28
Show Gist options
  • Save caironoleto/21971 to your computer and use it in GitHub Desktop.
Save caironoleto/21971 to your computer and use it in GitHub Desktop.
# 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