Skip to content

Instantly share code, notes, and snippets.

@renzon
Last active August 29, 2015 13:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save renzon/9894835 to your computer and use it in GitHub Desktop.
Save renzon/9894835 to your computer and use it in GitHub Desktop.
Código para geração de saques
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
QTD_INICIAL_DE_NOTAS = 10
NOTAS = [5, 10, 20, 50]
def sacar_recursiva(valor, saque, notas_disponiveis, qtdes_disponiveis):
# Se valor é 0, entao retorno é saque atual como resposta
if valor == 0:
return saque
# se não existem mais notas disponíveis, não é possível realizar o saque
if not notas_disponiveis:
raise Exception('Não é possível realizar o saque')
#Escolhendo maior nota disponivel
maior_nota_disponivel = notas_disponiveis[-1]
#Calculando valor restante que falta para completar o saque
valor_restante = valor - maior_nota_disponivel
if valor_restante < 0:
#Se valor eh negativo, a nota nao deve mais estar disponivel
notas_disponiveis = notas_disponiveis[:-1]
return sacar_recursiva(valor, saque, notas_disponiveis, qtdes_disponiveis)
# decrementando a quantidade da maior nota disponivel
qtde = qtdes_disponiveis[maior_nota_disponivel] - 1
qtdes_disponiveis[maior_nota_disponivel] = qtde
# Incluindo nota no saque
saque[maior_nota_disponivel] = saque[maior_nota_disponivel] + 1
# Tornando nota indisponível se ela acabou
if qtde == 0:
notas_disponiveis = notas_disponiveis[:-1]
return sacar_recursiva(valor_restante, saque, notas_disponiveis, qtdes_disponiveis)
def sacar(valor):
#iniciando saque como dicionario com todas notas em quantidade 0
saque = {n: 0 for n in NOTAS}
#Criando mapa com quantidade de notas disponiveis
qtdes_disponiveis = {n: QTD_INICIAL_DE_NOTAS for n in NOTAS}
#Copiando notas disponiveis. Inicialemnte sao todas as notas
notas_disponiveis = list(NOTAS)
return sacar_recursiva(valor, saque, notas_disponiveis, qtdes_disponiveis)
saque = sacar(550)
for nota, qtde in saque.iteritems():
print "Nota %s: %s" % (nota, qtde)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment