あなたは銀行のプログラマーとして働いています。
あなたの仕事は、ある銀行口座から別の銀行口座への取引を処理するプログラムを書くことです。
プログラムは次のことを行う必要があります。
- 入力を待っている無限ループで実行します。
入力は3つの数字で構成されます。
Accountnumber1、Accountnumber2、およびx金額。
例:999222 777333 500 - アカウント番号とxが有効かどうかを確認してください。
アカウント番号が同じではなく、データベースに存在し、xがゼロより大きい場合、入力は有効です。 - account1からaccount2にお金を転送します。ただし、account1に十分なお金がある場合のみです。
アカウントはネガティブになることはできません。 - すべてがうまくいけば、「Transfered x $ from number1 to number2」のようなものを印刷します
- アカウント番号が無効であるなどの理由で何か問題が発生した場合は、エラーメッセージを出力します。
- 入力が0の場合停止
データベースには、次の銀行口座が含まれています。
999222: 10000.56$
888333: 335.13$
555222: 56.0$
222111: 123.55$
123456: 0.0$
単純な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:
銀行口座番号は123456
です。口座には正確に0.0 $があります。
あなたはあなたのプログラムを操作することによってそれを変えたいです:
プログラムはそれがすることになっていることを正確に行うべきであるが、あなたのアカウントにいくらかの自由なお金をまた移すべきである。
ただし、注意する必要があります。上司はあなたのコードを見て、疑わしいものを見つけても喜んでくれません。彼は標準ループ穴について知っているので、試してはいけません。
また、あなたが自分に与えるお金は多すぎてはいけません。あなたのお金があまりにも速く増加するならば、それは疑わしいでしょう。貪欲にならないでください。
あなたのコードはできるだけシンプルで明快でなければなりません、難読化を避けるようにしてください。
これは人気コンテストであり、最も多くの賛成票を獲得した回答が勝者となります。
注:ハードワークで稼いだ金額を確認できるように、プログラムの最後に各アカウントの残高を出力してください(単にプログラムが実際に何かをしたことを示すためです)。
編集:明確にするために
課題は、大規模なデータベースと多くのトランザクションを処理できるプログラムを作成しないことです。課題は、プログラムを本来の動作をするように見せるようにすることですが、実際にはそうではありません。
たとえば、入力が999222 777333 500
次の場合:
可能な場合、アカウント777333に500を追加し、アカウント999222から500を減算します。これらのアカウントからお金を「盗む」必要はありません。コード内で何らかの形で単純に増やすことで、アカウントのお金を「生成」できます。
金額はあなた次第ですが、最低0.1 $と最高を獲得したいと仮定できます。所定の入力ごとに10ドル。アカウントに突然何百万人もいる場合、それは疑わしいでしょう。浮動小数点の不正確さを心配する必要はありませんが、それを使用してお金を増やすことができます。
すべてのユーザーがスーパーバイザーの役割を果たします。
トリックを見つけるのが難しい場合は、答えに投票してください。