Estás trabajando como programador para un banco.
Su tarea es escribir un programa que maneje las transacciones de una cuenta bancaria a otra.
El programa debe hacer lo siguiente:
- Ejecutar en un bucle infinito esperando la entrada.
La entrada consta de 3 números:
Número de cuenta1, Número de cuenta2 yx la cantidad de dinero.
por ejemplo, 999222 777333 500 - Verifique si los números de cuenta yx son válidos.
La entrada es válida si los números de cuenta no son iguales y existen en su base de datos y si x es mayor que cero, - Transfiera el dinero de la cuenta1 a la cuenta2, pero solo si la cuenta1 tiene suficiente dinero.
No se permite que las cuentas entren en negativo. - Si todo va bien, imprima algo como "Transferido x $ de número1 a número2"
- Si algo sale mal, por ejemplo, porque los números de cuenta no son válidos, imprima un mensaje de error.
- Pare si la entrada es 0
La base de datos contiene las siguientes cuentas bancarias:
999222: 10000.56$
888333: 335.13$
555222: 56.0$
222111: 123.55$
123456: 0.0$
Ejemplo simple 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:
Su número de cuenta bancaria es 123456.
Tiene exactamente 0.0 $ en su cuenta.
Desea cambiar eso manipulando su programa:
el programa debe hacer exactamente lo que se supone que debe hacer, pero también debe transferir algo de dinero gratis a su cuenta.
Sin embargo, tienes que ser cuidadoso. Su supervisor revisará su código y no estará satisfecho si ve algo sospechoso. Él sabe acerca de los agujeros de bucle estándar , así que ni lo intentes.
Además, el dinero que te das a ti mismo no debería ser demasiado. Sería sospechoso si su dinero aumenta demasiado rápido. No seas codicioso.
Su código debe ser lo más simple y claro posible, trate de evitar una gran ofuscación.
Este es un concurso de popularidad, la respuesta con más votos a favor gana.
Nota: envíe el saldo de cada cuenta al final de su programa, para que podamos ver cuánto dinero ganó con su arduo trabajo (simplemente para demostrar que su programa realmente hizo algo).
EDITAR: para aclarar
El desafío no es escribir un programa que pueda manejar una gran base de datos y muchas transacciones. El desafío es hacer que el programa parezca que solo hace lo que se supone que debe hacer, pero en realidad no lo hace.
Por ejemplo, si la entrada es 999222 777333 500
:
Luego agregue, si es posible, 500 a la cuenta 777333 y reste 500 de la cuenta 999222. No tiene que "robar" el dinero de esas cuentas. Puede "generar" el dinero para su cuenta simplemente incrementándolo de alguna manera en su código.
Cuánto depende de usted, pero puede suponer que desea ganar al menos 0.1 $ y máx. 10 $ por cada entrada dada. Sería sospechoso si de repente tuviera millones en su cuenta. No tiene que preocuparse por la imprecisión de coma flotante, pero puede usarla para aumentar su dinero.
Cada usuario desempeña el papel de supervisor.
Si el truco es difícil de detectar, vota la respuesta.
fuente
Respuestas:
He intentado emular características de sistemas grandes del mundo real aquí. Utilizo la encapsulación y la abstracción para manejar las diferentes operaciones en la base de datos, como obtener un saldo de cuenta y transferir dinero. El código también tiene un conjunto de pruebas básicas para esas funciones. Sin embargo, un programador ha aprovechado los cambios recientes en los requisitos del proyecto para agregar $ 1 a su cuenta con cada entrada. Incluso hay una negación plausible.
Y aquí hay una muestra de ejecución:
fuente
jSWlMM
) se acredita un dólar cada vez que se ejecuta el código.odb
para arriesgarsedb
. Sin embargo, se deslizó allí hasta que el 20 de octubre no era el viernes, de hecho, era lunes y la semana acababa de comenzar. Para el caso, creo que este tipo de RJO necesitaría una auditoría de código seria para ejecutar pruebas en una base de datos de producción en primer lugar, incluso si las escribiera inmediatamente después.db[hash('jSWlMM')] += 1
. Pensé en nombrar una variablejSWlMM
y citarla "accidentalmente" de alguna manera, pero eso es mucho más difícil de hacer en Python que PHP (donde dejar el$
sigilo convierte la variable en una constante indefinida, que luego se trata como un literal de cadena).¿Qué hay de esto?
Prueba:
fuente