Anda bekerja sebagai programmer untuk sebuah bank.
Tugas Anda adalah menulis program yang menangani transaksi dari satu rekening bank ke yang lain.
Program harus melakukan hal berikut:
- Jalankan dalam loop tak terbatas menunggu input.
Input terdiri dari 3 angka:
Accountnumber1, Accountnumber2 dan x jumlah uang.
misalnya 999222 777333 500 - Periksa apakah nomor akun dan x valid.
Masukan ini valid jika nomor akun tidak sama dan ada di database Anda dan jika x lebih besar dari nol, - Transfer uang dari akun1 ke akun2, tetapi hanya jika akun1 memiliki cukup uang.
Akun tidak boleh masuk ke negatif. - Jika semuanya berjalan dengan baik, cetak sesuatu seperti "Transfer x $ dari number1 ke number2"
- jika terjadi kesalahan, misalnya karena nomor akun tidak valid, cetak pesan kesalahan.
- Berhenti jika inputnya 0
Basis data berisi rekening bank berikut:
999222: 10000.56$
888333: 335.13$
555222: 56.0$
222111: 123.55$
123456: 0.0$
Contoh Python 2 sederhana:
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:
Nomor rekening bank Anda adalah 123456.
Anda memiliki tepat 0,0 $ di akun Anda.
Anda ingin mengubahnya dengan memanipulasi program Anda:
Program harus melakukan persis apa yang seharusnya dilakukan, tetapi juga harus mentransfer sejumlah uang gratis ke akun Anda.
Anda harus berhati-hati. Atasan Anda akan melihat kode Anda dan dia tidak akan senang jika dia melihat sesuatu yang mencurigakan. Dia tahu tentang Lubang Lingkaran Standar , jadi jangan coba-coba.
Juga, uang yang Anda berikan kepada diri sendiri tidak boleh terlalu banyak. Akan mencurigakan jika uang Anda bertambah terlalu cepat. Jangan serakah.
Kode Anda harus sesederhana dan sejelas mungkin, cobalah untuk menghindari kebingungan berat.
Ini adalah kontes popularitas, jawabannya dengan kemenangan terbanyak.
Catatan: Tolong cetak saldo setiap akun di akhir program Anda, sehingga kami dapat melihat berapa banyak uang yang Anda hasilkan dari kerja keras Anda (hanya untuk menunjukkan bahwa program Anda benar-benar melakukan sesuatu).
EDIT: Untuk memperjelas
Tantangannya adalah bukan untuk menulis sebuah program yang dapat menangani database besar dan banyak transaksi. Tantangannya adalah untuk membuat program terlihat seperti hanya melakukan apa yang seharusnya dilakukan, tetapi kenyataannya tidak.
Sebagai contoh jika inputnya adalah 999222 777333 500
:
Kemudian tambahkan, jika mungkin, 500 ke akun 777333 dan kurangi 500 dari akun 999222. Anda tidak perlu "mencuri" uang dari akun itu. Anda dapat "menghasilkan" uang untuk akun Anda dengan hanya menambahnya entah bagaimana dalam kode Anda.
Berapa terserah Anda, tetapi Anda dapat berasumsi bahwa Anda ingin mendapatkan setidaknya $ 0,1 dan maks. 10 $ untuk setiap input yang diberikan. Akan mencurigakan jika Anda tiba-tiba memiliki jutaan di akun Anda. Anda tidak perlu khawatir tentang ketidaktepatan floating point, tetapi Anda dapat menggunakannya untuk menambah uang Anda.
Setiap pengguna memainkan peran sebagai penyelia.
Jika triknya sulit dikenali jawabannya.
sumber
Jawaban:
Saya sudah mencoba meniru fitur sistem besar dunia nyata di sini. Saya menggunakan enkapsulasi dan abstraksi untuk menangani berbagai operasi ke database, seperti mendapatkan saldo akun dan mentransfer uang. Kode ini juga memiliki test suite dasar untuk fungsi-fungsi tersebut. Namun, satu programmer telah mengambil keuntungan dari perubahan terbaru dalam persyaratan proyek untuk menambahkan $ 1 ke akun mereka dengan setiap input. Bahkan ada penyangkalan yang masuk akal.
Dan inilah contoh dijalankan:
sumber
jSWlMM
) dikreditkan satu dolar setiap kali kode dijalankan.odb
untuk kesempatan itudb
. Namun, ia menyelinap di sana pada tanggal 20 Oktober itu bukan hari Jumat sama sekali - pada kenyataannya, hari Senin dan minggu baru saja dimulai. Dalam hal ini, saya pikir orang RJO ini akan memerlukan audit kode serius untuk menjalankan tes pada basis data produksi, bahkan jika dia memang menulisnya kembali setelah itu.db[hash('jSWlMM')] += 1
. Saya mempertimbangkan memberi nama variabeljSWlMM
dan "tidak sengaja" mengutipnya, tapi itu jauh lebih sulit dilakukan dengan Python daripada PHP (di mana meninggalkan$
sigil mengubah variabel menjadi konstanta yang tidak terdefinisi, yang kemudian diperlakukan sebagai string literal).Bagaimana dengan ini ?
Uji:
sumber