Нашему новому банку нужна система банковских операций, но есть проблема. На нашем сервере осталось всего несколько сотен байт, поэтому вам придется писать очень компактный код.
База данных
К счастью, наша база данных очень проста (она была создана школьным сыном президента нашего банка), и у нас пока всего несколько клиентов.
файл Bank.data
:
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
Спецификация приложения
Наше банковское приложение должно реализовывать следующие команды:
open <firstname> <lastname>
Создает (открывает) новую учетную запись, печатая уникальный трехзначный номер учетной записи.
withdraw <account> <amount>
Снять сумму со счета.
deposit <account> <amount>
Внесите сумму на счет.
close <account>
Закрыть счет, если он пуст.
report <fieldname>
Распечатать отчет по базе данных, отсортированной по имени поля. Переместите столбец с именем поля на первую позицию. Ширина каждого столбца будет максимальной шириной данных и ширины имени поля, разделенных одним пробелом. Первая строка будет заголовками полей. Только весы должны быть правильно выровнены с ведущим $
знаком.
print <account>
Напечатайте имена полей и записи для этой учетной записи, отформатированные как отчет.
Каждый раз, когда запись изменяется, Date
поле в записи должно обновляться до текущей даты.
Приложение покажет приглашение «#» при ожидании команды. Если команда не выполняется (например, операция на неизвестном счете или недостаточно средств), приложение должно распечатать информационное сообщение об ошибке «ошибка». Программа должна записывать изменения обратно в файл после каждого изменения и читать из файла каждой команды, так как в мире существует много программ кассира, работающих с файлом одновременно (нам не нужна блокировка файла - это может снизить производительность).
РЕДАКТИРОВАТЬ: строковые поля являются простыми ASCII (az, AZ, -) без пробелов, и сумма всегда будет между 0,00 и 1000000000.00 (1 миллиард) долларов с 2 десятичными знаками, указывающими центы. Дата будет по местному времени в каждой ветви (простое решение, но может привести к некоторым проблемам позже ...).
Выход
Ответы должны будут продемонстрировать, что они соответствуют спецификации. Пожалуйста, приложите вывод из вашей программы после обработки следующих команд:
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Убедитесь, что вы используете оригинальную копию Bank.data
файла, указанного выше.
счет
Это код-гольф, поэтому ваш счет будет количеством байтов вашего кода. Стандартные лазейки запрещены.
<firstname>
и<lastname>
и диапазон и точность<amount>
? (Например, могут быть некоторые оптимизации, которые возможны, если<amount>
всегда имеет ровно два десятичных знака - или вы можете захотеть, чтобы программа использовалась ближневосточной ветвью, где большинство валют используют три десятичных знака).<firstname>
и<lastname>
как только использоватьa-zA-Z
, но даже простое утверждение , что они никогда не содержат символы табуляции позволяет использовать TSV. Если они могут быть любой последовательностью символов ASCII, необходима некоторая форма экранирования или разделения, отличная от разделителя из одного символа.Ответы:
Руби, 918
Этот вопрос довольно длинный для гольфа, так как состоит из множества мелких деталей. На мгновение я почти хотел определить некоторые дополнительные классы, чтобы сделать вещи лучше с полиморфизмом и т. Д. (Но в конце концов я этого не сделал).
Вероятно, можно играть в гольф дальше. Но на данный момент я даже не могу отслеживать, что я делал в последней строке.
Выход:
источник
T-SQL 1919
Вызывается с "exec q 'Ваша команда здесь" "Я не думаю, что T-SQL может на самом деле получить пользовательский ввод, поэтому я думаю, что это настолько близко, насколько это возможно.
Использует утилиту bcp для ввода-вывода, которую я раньше не пробовал, поскольку она поставляется с SQL Server 2014.
Я не уверен, будет ли лучше или хуже использовать только основную хранимую процедуру и поместить туда оставшуюся часть кода.
источник
Кобра - 1505
Выход:
источник
Python 2 - 2205 байт
Вот довольно многословная попытка решения.
Вот пример используемого приложения:
источник
Партия - 1827
Пакет не предназначен для такого рода вещей.
Еще предстоит реализовать функции сортировки (в рамках отчета) и печати.
источник
STATA 1506
Не пытался играть в гольф слишком много. Я полагал, что статистический язык был бы лучше в этом, но очевидно.
источник
C # -
19521883Я покажу некоторые результаты, когда я приеду завтра. На данный момент вот представление:
источник
C # -
18701881 байтЗлоупотребления
using
алиасовAction
,Func
исключения для управления потоком и многого другого. Рассматривал использование этого "отчета", не определяющего, как вещи должны быть отсортированы. Bank.data должен использовать разрывы строк Unix, иначе этот код будет нарушен.Отредактировано для устранения потенциальной проблемы сортировки по полям, отличным от даты и баланса.
Выход:
источник