Nasz nowy bank potrzebuje systemu transakcyjnego bankomatu, ale jest problem. Na naszym serwerze pozostało tylko kilkaset bajtów miejsca, więc będziesz musiał napisać bardzo zwarty kod.
Baza danych
Na szczęście nasza baza danych jest bardzo prosta (została zbudowana przez ucznia-syna naszego prezesa banku) i do tej pory mamy tylko kilku klientów.
plik Bank.data
jest:
Account Firstname Lastname Balance Date
123 Maree Jones 346.22 2014-12-13
035 Thomas Breakbone 3422.02 2015-01-03
422 Henrietta Throsby-Borashenko 277847.74 2014-11-21
501 Timmy Bongo 7.95 2014-11-04
105 William Greene 893.00 2015-01-06
300 Mary Galoway 1228.73 2014-12-28
203 Samantha Richardson 2055.44 2014-11-01
151 Bruce Wayne 956119.66 2014-10-09
166 Chip Stonesmith 266.71 2014-12-15
888 Alexandria Cooper 1299.82 2014-12-30
Specyfikacja aplikacji
Nasza aplikacja bankowa musi implementować następujące polecenia:
open <firstname> <lastname>
Tworzy (otwiera) nowe konto, drukując unikalny 3-cyfrowy numer konta.
withdraw <account> <amount>
Wypłać kwotę z konta.
deposit <account> <amount>
Wpłać kwotę na konto.
close <account>
Zamknij konto, jeśli jest puste.
report <fieldname>
Wydrukuj raport bazy danych posortowany według nazwy pola. Przenieś kolumnę nazwy pola na pierwszą pozycję. Szerokość każdej kolumny będzie maksymalną z najszerszych danych i szerokością nazwy pola, oddzieloną jedną spacją. Pierwszą linią będą tytuły pól. Wagi muszą być odpowiednio uzasadnione $
znakiem wiodącym .
print <account>
Wydrukuj nazwy pól i zapisz dla tego konta sformatowanego jak raport.
Za każdym razem, gdy rekord jest zmieniany, Date
pole w rekordzie musi być aktualizowane do bieżącej daty.
Aplikacja wyświetli monit „#” podczas oczekiwania na polecenie. Jeśli polecenie nie powiedzie się (np. Operacja na nieznanym koncie lub niewystarczające fundusze), aplikacja musi wydrukować informacyjny komunikat o błędzie „błąd”. Program musi zapisywać zmiany z powrotem do pliku po każdej zmianie i czytać z pliku przy każdej komendzie, ponieważ istnieje wiele programów kasjerskich na całym świecie działających jednocześnie na tym pliku (nie potrzebujemy blokowania pliku - może to zmniejszyć wydajność).
EDYCJA: Pola ciągów są prostymi ASCII (az, AZ, -) bez białych znaków, a kwota zawsze będzie wynosić od 0,00 do 1000000000,00 (1 miliard) dolarów z 2 miejscami po przecinku oznaczającymi centy. Data będzie podana w czasie lokalnym w każdym oddziale (proste rozwiązanie, ale może później spowodować pewne problemy ...).
Wynik
Odpowiedzi będą musiały wykazać, że spełniają specyfikację. Załącz dane wyjściowe z programu po przetworzeniu następujących poleceń:
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Upewnij się, że używasz oryginalnej kopii Bank.data
pliku podanej powyżej.
Punktacja
To jest golf golfowy, więc twój wynik będzie liczbą bajtów twojego kodu. Standardowe luki są zabronione.
<firstname>
oraz<lastname>
zakres i precyzję<amount>
? (Na przykład mogą istnieć pewne optymalizacje, które są możliwe, jeśli<amount>
zawsze mają dokładnie dwa miejsca po przecinku - lub możesz chcieć, aby program był użyteczny przez oddział Bliskiego Wschodu, gdzie większość walut używa trzech miejsc po przecinku).<firstname>
i<lastname>
oba wykorzystują tylkoa-zA-Z
, ale nawet proste stwierdzenie, że nigdy nie zawierają znaków tabulacji, pozwala na użycie TSV. Jeśli mogą to być dowolne sekwencje znaków ASCII, konieczna jest jakaś forma zmiany znaczenia lub rozdzielania znaków inna niż za pomocą separatora jednoznakowego.Odpowiedzi:
Ruby, 918
To pytanie jest dość długie do gry w golfa, ponieważ składa się z wielu małych części. Przez chwilę prawie chciałem zdefiniować dodatkowe klasy, aby uporządkować rzeczy z polimorfizmem itp. (Ale ostatecznie tego nie zrobiłem).
Prawdopodobnie można dalej grać w golfa. Ale na razie nie mogę nawet śledzić tego, co zrobiłem w ostatniej linii.
Wynik:
źródło
T-SQL 1919
Wywoływany za pomocą „exec q” Twoje polecenie tutaj ”„ Nie sądzę, aby T-SQL mógł uzyskać dane wejściowe od użytkownika, więc myślę, że jest tak blisko, jak to tylko możliwe.
Korzysta z narzędzia bcp dla operacji we / wy, których wcześniej nie próbowałem, ponieważ pochodzi z SQL Server 2014.
Nie jestem pewien, czy byłoby lepiej czy gorzej użyć tylko głównej procedury składowanej i umieścić tam resztę kodu.
źródło
Kobra - 1505
Wynik:
źródło
Python 2 - 2205 bajtów
Oto dość pełna próba rozwiązania.
Oto przykład używanej aplikacji:
źródło
Partia - 1827
Partia nie jest zbudowana dla tego rodzaju rzeczy.
Jednak do wdrożenia funkcji Sortuj (w raporcie) i Drukuj.
źródło
STATA 1506
Nie próbowałem za dużo grać w golfa. Uznałem, że język statystyczny byłby w tym lepszy, ale najwyraźniej.
źródło
C # -
19521883Pokażę trochę wyników, kiedy wejdę jutro. Na razie oto przesłanie:
źródło
C # -
18701881 bajtówNadużywanie
using
aliasówAction
,Func
wyjątki do sterowania przepływem i więcej. Zastanawiałem się nad wykorzystaniem tego „raportu”, który nie określał, w jaki sposób należy sortować. Bank.data musi używać podziałów linii uniksowych, w przeciwnym razie ten kod się zepsuje.Edytowane, aby rozwiązać potencjalne problemy z sortowaniem według pól innych niż Data i Saldo.
Wynik:
źródło