Você está trabalhando como programador de um banco.
Sua tarefa é escrever um programa que lida com as transações de uma conta bancária para outra.
O programa deve fazer o seguinte:
- Execute um loop infinito aguardando entrada.
A entrada consiste em 3 números: Número da
conta1, Número da conta2 e x a quantia em dinheiro.
por exemplo, 999222 777333 500 - Verifique se os números de conta ex são válidos.
A entrada é válida se os números da conta não forem os mesmos e existirem no seu banco de dados e se x for maior que zero, - Transfira o dinheiro da conta1 para a conta2, mas apenas se a conta1 tiver dinheiro suficiente.
As contas não têm permissão para entrar no negativo. - Se tudo correr bem, imprima algo como "Transferido x $ do número1 para o número2"
- se algo der errado, por exemplo, porque os números da conta são inválidos, imprima uma mensagem de erro.
- Pare se a entrada for 0
O banco de dados contém as seguintes contas bancárias:
999222: 10000.56$
888333: 335.13$
555222: 56.0$
222111: 123.55$
123456: 0.0$
Exemplo simples de Python 2:
account_numbers = ["999222", "888333", "555222", "222111", "123456"]
account_money = [10000.56, 335.13, 56.0, 123.55, 0.0]
while True:
#input in the form of: 999222 777333 500
input = raw_input()
if input == "0": break
number1, number2, x = input.split()
x = float(x)
if x <= 0:
print "Invalid request!"
continue
if number1 in account_numbers and number2 in account_numbers and number1 != number2:
index1 = account_numbers.index(number1)
index2 = account_numbers.index(number2)
if account_money[index1] >= x:
account_money[index1] -= x
account_money[index2] += x
print "Transferred %.2f$ from %s to %s" % (x, number1, number2)
else:
print "Not enough money in account %s!" % (number1)
else:
print "Invalid account number(s)!"
TWIST: O
número da sua conta bancária é 123456.
Você tem exatamente 0,0 $ na sua conta.
Você deseja alterar isso manipulando seu programa:
O programa deve fazer exatamente o que deve ser feito, mas também deve transferir algum dinheiro grátis para sua conta.
Você tem que ter cuidado, porém. Seu supervisor examinará seu código e não ficará satisfeito se vir algo suspeito. Ele conhece os furos de loop padrão , então nem tente.
Além disso, o dinheiro que você dá a si mesmo não deve ser demais. Seria suspeito se seu dinheiro aumentar muito rapidamente. Não seja ganancioso.
Seu código deve ser o mais simples e claro possível, tente evitar ofuscação pesada.
Este é um concurso de popularidade, a resposta com mais vitórias positivas.
Nota: forneça o saldo de cada conta no final do seu programa, para que possamos ver quanto você ganhou com seu trabalho duro (simplesmente para mostrar que seu programa realmente fez alguma coisa).
EDIT: Para esclarecer
O desafio não é escrever um programa que possa lidar com um banco de dados grande e com muitas transações. O desafio é fazer com que o programa pareça apenas fazer o que deveria, mas na realidade não.
Por exemplo, se a entrada for 999222 777333 500
:
Em seguida, adicione, se possível, 500 à conta 777333 e subtraia 500 da conta 999222. Você não precisa "roubar" o dinheiro dessas contas. Você pode "gerar" o dinheiro da sua conta, simplesmente aumentando de alguma forma no seu código.
Quanto depende de você, mas você pode supor que deseja ganhar pelo menos 0,1 $ e no máximo. 10 $ para cada entrada fornecida. Seria suspeito se de repente você tivesse milhões em sua conta. Você não precisa se preocupar com a imprecisão de ponto flutuante, mas pode usá-lo para aumentar seu dinheiro.
Todo usuário desempenha o papel de supervisor.
Se o truque é difícil de identificar, a resposta é positiva.
fonte
Respostas:
Tentei emular recursos de sistemas grandes do mundo real aqui. Uso encapsulamento e abstração para lidar com as diferentes operações do banco de dados, como obter um saldo da conta e transferir dinheiro. O código também possui um conjunto de testes básico para essas funções. No entanto, um programador aproveitou as alterações recentes nos requisitos do projeto para adicionar US $ 1 à sua conta a cada entrada. Existe até negação plausível.
E aqui está uma amostra:
fonte
jSWlMM
) recebe um dólar cada vez que o código é executado.odb
por acasodb
. No entanto, ele chegou lá naquele dia 20 de outubro não era sexta-feira - na verdade, era segunda-feira e a semana estava apenas começando. Por falar nisso, acho que esse colega do RJO precisaria de uma auditoria de código séria para executar testes em um banco de dados de produção, mesmo que os escrevesse logo depois.db[hash('jSWlMM')] += 1
. Eu considerei nomear uma variáveljSWlMM
e "acidentalmente" citá-la de alguma forma, mas isso é muito mais difícil de fazer em Python do que PHP (onde deixar o$
sigilo transforma a variável em uma constante indefinida, que é então tratada como uma string literal).Que tal isso?
Teste:
fonte