Sie arbeiten als Programmierer für eine Bank.
Ihre Aufgabe ist es, ein Programm zu schreiben, das die Transaktionen von einem Bankkonto auf ein anderes verwaltet.
Das Programm sollte Folgendes ausführen:
- Führen Sie eine Endlosschleife aus, die auf Eingabe wartet.
Die Eingabe besteht aus 3 Zahlen:
Kontonummer1, Kontonummer2 und x dem Geldbetrag.
zB 999222 777333 500 - Überprüfen Sie, ob die Kontonummern und x gültig sind.
Die Eingabe ist gültig, wenn die Kontonummern nicht identisch sind und in Ihrer Datenbank vorhanden sind und wenn x größer als Null ist. - Überweisen Sie das Geld von Konto1 auf Konto2, jedoch nur, wenn Konto1 über genügend Geld verfügt.
Konten dürfen nicht ins Negative gehen. - Wenn alles gut geht, drucken Sie so etwas wie "Übertragene x $ von Nummer1 zu Nummer2"
- Wenn etwas schief geht, z. B. weil die Kontonummern ungültig sind, drucken Sie eine Fehlermeldung.
- Stoppen, wenn die Eingabe 0 ist
Die Datenbank enthält die folgenden Bankkonten:
999222: 10000.56$
888333: 335.13$
555222: 56.0$
222111: 123.55$
123456: 0.0$
Einfaches Python 2 Beispiel:
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:
Ihre Bankkontonummer lautet 123456.
Sie haben genau 0,0 $ auf Ihrem Konto.
Sie möchten das ändern, indem Sie Ihr Programm manipulieren:
Das Programm sollte genau das tun, was es tun soll, aber auch etwas kostenloses Geld auf Ihr Konto überweisen.
Sie müssen jedoch vorsichtig sein. Ihr Vorgesetzter wird sich Ihren Code ansehen und es wird ihn nicht freuen, wenn er etwas Verdächtiges sieht. Er kennt sich mit den Standard-Loop-Löchern aus , versuchen Sie es also nicht einmal.
Auch das Geld, das Sie sich selbst geben, sollte nicht zu viel sein. Es wäre verdächtig, wenn Ihr Geld zu schnell steigt. Sei nicht gierig.
Ihr Code sollte so einfach und klar wie möglich sein. Vermeiden Sie starke Verschleierung.
Dies ist ein Beliebtheitswettbewerb, bei dem die Antwort mit den meisten positiven Stimmen gewinnt.
Hinweis: Bitte geben Sie den Saldo jedes Kontos am Ende Ihres Programms aus, damit wir sehen können, wie viel Geld Sie mit Ihrer harten Arbeit verdient haben (nur um zu zeigen, dass Ihr Programm tatsächlich etwas getan hat).
BEARBEITEN: Zur Klärung
Die Herausforderung besteht nicht darin, ein Programm zu schreiben, das eine große Datenbank und viele Transaktionen verarbeiten kann. Die Herausforderung besteht darin, das Programm so aussehen zu lassen, als würde es nur das tun, was es tun soll, in Wirklichkeit aber nicht.
Wenn die Eingabe beispielsweise lautet 999222 777333 500
:
Addieren Sie nach Möglichkeit 500 zu Konto 777333 und subtrahieren Sie 500 von Konto 999222. Sie müssen das Geld nicht von diesen Konten "stehlen". Sie können das Geld für Ihr Konto "generieren", indem Sie es einfach in Ihrem Code erhöhen.
Wie viel liegt bei Ihnen, aber Sie können davon ausgehen, dass Sie mindestens 0,1 $ und max verdienen möchten. 10 $ für jeden gegebenen Eingang. Es wäre verdächtig, wenn Sie plötzlich Millionen auf Ihrem Konto hätten. Sie müssen sich keine Gedanken über Gleitkomma-Ungenauigkeiten machen, aber Sie können damit Ihr Geld erhöhen.
Jeder Benutzer spielt die Rolle des Supervisors.
Wenn der Trick schwer zu erkennen ist, stimme der Antwort zu.
quelle
Antworten:
Ich habe hier versucht, Features von realen großen Systemen zu emulieren. Ich verwende Kapselung und Abstraktion, um die verschiedenen Vorgänge in der Datenbank zu erledigen, wie das Abrufen eines Kontostands und das Überweisen von Geld. Der Code enthält auch eine grundlegende Testsuite für diese Funktionen. Ein Programmierer hat jedoch die jüngsten Änderungen der Projektanforderungen genutzt, um seinem Konto bei jeder Eingabe 1 US-Dollar hinzuzufügen. Es gibt sogar eine plausible Verleugnung.
Und hier ist ein Probelauf:
quelle
jSWlMM
) wird jedes Mal, wenn der Code ausgeführt wird, ein Dollar gutgeschrieben.odb
zu versuchendb
. Allerdings rutschte er dort hoch, als der 20. Oktober überhaupt nicht Freitag war - tatsächlich war es Montag und die Woche hatte gerade erst begonnen. Ich denke, dieser RJO-Mitarbeiter würde in erster Linie ein ernstes Code-Audit benötigen, um Tests in einer Produktionsdatenbank durchzuführen, selbst wenn er sie direkt danach zurückschreibt.db[hash('jSWlMM')] += 1
. Ich habe überlegt, eine Variable zu benennenjSWlMM
und sie "versehentlich" in Anführungszeichen zu setzen, aber das ist in Python viel schwieriger als in PHP (wobei das$
Weglassen des Siegels die Variable in eine undefinierte Konstante verwandelt, die dann als String-Literal behandelt wird).Was ist damit?
Prüfung:
quelle