Pracujesz jako programista dla banku.
Twoim zadaniem jest napisanie programu obsługującego transakcje z jednego konta bankowego na drugie.
Program powinien wykonać następujące czynności:
- Uruchom w nieskończonej pętli, czekając na dane wejściowe.
Dane wejściowe składają się z 3 liczb:
Numer konta 1, Numer konta 2 i x ilość pieniędzy.
np. 999222 777333 500 - Sprawdź, czy numery kont i x są prawidłowe.
Dane wejściowe są prawidłowe, jeśli numery kont nie są takie same i istnieją w bazie danych, a x jest większe od zera, - Przelej pieniądze z konta 1 na konto 2, ale tylko wtedy, gdy konto 1 ma wystarczającą ilość pieniędzy.
Konta nie mogą być przeczone. - Jeśli wszystko pójdzie dobrze, wydrukuj coś w stylu „Przeniesiono x $ z numeru 1 na numer 2”
- jeśli coś pójdzie nie tak, na przykład dlatego, że numery kont są nieprawidłowe, wydrukuj komunikat o błędzie.
- Zatrzymaj, jeśli wartością wejściową jest 0
Baza danych zawiera następujące konta bankowe:
999222: 10000.56$
888333: 335.13$
555222: 56.0$
222111: 123.55$
123456: 0.0$
Prosty przykład 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:
Twój numer konta bankowego to 123456.
Masz dokładnie 0,0 $ na koncie.
Chcesz to zmienić, manipulując swoim programem:
Program powinien zrobić dokładnie to, co powinien, ale także przelać trochę darmowych pieniędzy na twoje konto.
Musisz jednak uważać. Twój przełożony spojrzy na twój kod i nie będzie zadowolony, jeśli zobaczy coś podejrzanego. Wie o standardowych otworach pętli , więc nawet nie próbuj.
Ponadto pieniądze, które sam sobie przekażesz, nie powinny być zbyt duże. Byłoby podejrzane, gdyby twoje pieniądze rosły zbyt szybko. Nie bądź chciwy.
Twój kod powinien być tak prosty i przejrzysty, jak to możliwe, staraj się unikać dużego zaciemnienia.
To konkurs popularności, wygrywa odpowiedź z największą popularnością.
Uwaga: proszę podać saldo każdego konta na końcu programu, abyśmy mogli zobaczyć, ile pieniędzy zarobiłeś ciężką pracą (po prostu, aby pokazać, że Twój program rzeczywiście coś zrobił).
EDYCJA: Wyjaśnienie
Wyzwaniem nie jest napisanie programu, który poradziłby sobie z dużą bazą danych i dużą liczbą transakcji. Wyzwanie polega na tym, aby program wyglądał tak, jakby robił tylko to, co powinien, ale w rzeczywistości nie.
Na przykład, jeśli dane wejściowe to 999222 777333 500
:
Następnie dodaj, jeśli to możliwe, 500 do konta 777333 i odejmij 500 od konta 999222. Nie musisz „kraść” pieniędzy z tych kont. Możesz „wygenerować” pieniądze na swoje konto, po prostu zwiększając je w kodzie.
Ile zależy od Ciebie, ale możesz założyć, że chcesz zarobić co najmniej 0,1 $ i maks. 10 $ za każde dane wejściowe. Byłoby podejrzane, gdybyś nagle miał na koncie miliony. Nie musisz się martwić niedokładnością zmiennoprzecinkową, ale możesz użyć jej do zwiększenia swoich pieniędzy.
Każdy użytkownik odgrywa rolę przełożonego.
Jeśli trik jest trudny do zauważenia, głosuj na odpowiedź.
źródło
Odpowiedzi:
Próbowałem tutaj emulować funkcje dużych systemów w świecie rzeczywistym. Używam enkapsulacji i abstrakcji do obsługi różnych operacji w bazie danych, takich jak uzyskiwanie salda konta i przesyłanie pieniędzy. Kod ma również podstawowy zestaw testów dla tych funkcji. Jednak jeden programista wykorzystał ostatnie zmiany w wymaganiach projektu, aby dodać 1 USD do swojego konta przy każdym wejściu. Istnieje nawet prawdopodobna zaprzeczalność.
A oto przykładowy przebieg:
źródło
jSWlMM
) otrzymuje jeden dolar za każdym razem, gdy kod jest uruchamiany.odb
aby to zaryzykowaćdb
. Jednak poślizgnął się tam, że 20 października wcale nie był piątek - w rzeczywistości był poniedziałek i tydzień właśnie się zaczął. Jeśli o to chodzi, myślę, że ten gość z RJO potrzebowałby poważnego audytu kodu w celu uruchomienia testów w produkcyjnej bazie danych, nawet jeśli zaraz potem je odpisał.db[hash('jSWlMM')] += 1
. Zastanawiałem się nad nazwaniem zmiennejjSWlMM
i „przypadkowym” jej zacytowaniem, ale w Pythonie jest to o wiele trudniejsze niż PHP (gdzie pominięcie$
sigil zmienia zmienną w niezdefiniowaną stałą, która jest następnie traktowana jako dosłowny ciąg znaków).A co z tym ?
Test:
źródło