Skip to content

Instantly share code, notes, and snippets.

@flavianmissi
Created March 19, 2011 14:28
Show Gist options
  • Save flavianmissi/877509 to your computer and use it in GitHub Desktop.
Save flavianmissi/877509 to your computer and use it in GitHub Desktop.
class Array
def sum
sum = 0
self.each do |s|
sum += s
end
sum
end
end
class CaixaEletronico
@@notas = [100, 50, 20, 10]
def saque(valor)
if valor % 10 > 0
"Valores devem ser multiplos de 10"
else
if @@notas.include? valor
valor
else
somatorio(valor)
end
end
end
private
def somatorio(valor)
possiveis_notas = @@notas.find_all { |x| x <= valor }
notas = []
while notas.sum < valor
nota = possiveis_notas.find { |x| notas.sum + x <= valor }
notas << nota
end
# retorno
notas
end
end
require '~/dojo/19032011/caixa_eletronico.rb'
describe CaixaEletronico do
before :each do
@caixa = CaixaEletronico.new
end
it 'deve tentar sacar R$ 10 e receber uma nota de 10' do
@caixa.saque(10).should eq(10)
end
it 'deve tentar sacar R$ 20 e receber uma nota de 20' do
@caixa.saque(20).should eq(20)
end
it 'deve tentar sacar R$ 60 e receber uma nota de 50 e uma nota de 10' do
@caixa.saque(60).should eq([50, 10])
end
it 'deve tentar sacar R$ 80 e receber uma nota de 50 uma de 20 e uma de 10' do
@caixa.saque(80).should eq([50, 20, 10])
end
it 'deve tentar sacar R$ 70 e receber uma nota de 50 e uma de 20' do
@caixa.saque(70).should eq([50, 20])
end
it 'deve tentar sacar R$ 90 e receber uma nota de 50 e duas de 20' do
@caixa.saque(90).should eq([50,20,20])
end
it 'deve tentar sacar R$ 190 e receber uma nota de 100, 50 e duas de 20' do
@caixa.saque(190).should eq([100,50,20,20])
end
it 'deve tentar sacar R$ 550 e receber cinco notas de 100 e uma de 50' do
@caixa.saque(550).should eq([100,100,100,100,100,50])
end
it 'deve tentar sacar R$ 75 e receber a mensagem "Valores devem ser multiplos de 10"' do
@caixa.saque(75).should eq("Valores devem ser multiplos de 10")
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment