新しい銀行には窓口取引システムが必要ですが、問題があります。サーバーに残っているスペースは数百バイトしかないため、非常にコンパクトなコードを書く必要があります。
データベース
ありがたいことに、私たちのデータベースは非常にシンプルで(銀行の社長の息子が作成しました)、現在のところ少数の顧客しかいません。
ファイル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>
一意の3桁のアカウント番号を印刷する新しいアカウントを作成(オープン)します。
withdraw <account> <amount>
アカウントから金額を引き出します。
deposit <account> <amount>
口座への入金金額。
close <account>
空の場合はアカウントを閉じます。
report <fieldname>
フィールド名でソートされたデータベースのレポートを印刷します。fieldname列を最初の位置に移動します。各列の幅は、1つのスペースで区切られた最大のデータとフィールド名の幅の最大値になります。最初の行はフィールドのタイトルです。天びんは、先頭の$記号でのみ正当化される必要があります。
print <account>
レポートのようにフォーマットされたこのアカウントのフィールド名と記録を印刷します。
レコードが変更されるたびに、レコードのDateフィールドを現在の日付に更新する必要があります。
アプリケーションは、コマンドを待機しているときに「#」プロンプトを表示します。コマンドが失敗した場合(不明なアカウントでの操作や資金不足など)、アプリケーションは情報エラーメッセージ "failed"を出力する必要があります。プログラムは、各変更後にファイルに変更を書き戻し、各コマンドでファイルを同時に読み取る必要があります(世界中に多くのテラープログラムが同時にファイルを操作しているためです(ファイルロックは必要ありません-パフォーマンスが低下する可能性があります))
編集:文字列フィールドは、空白のない単純なASCII(az、AZ、-)で、金額は常に0.00から1000000000.00(10億)ドルで、小数点以下2桁はセントを示します。日付は各ブランチの現地時間になります(簡単な解決策ですが、後で問題が発生する可能性があります...)。
出力
回答は、仕様を満たしていることを示す必要があります。次のコマンドを処理した後、プログラムからの出力を添付してください。
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Bank.data上記のファイルの元のコピーを使用していることを確認してください。
得点
これはコードゴルフなので、スコアはコードのバイト数になります。標準的な抜け穴は禁止されています。
<firstname>およびの文字<lastname>と、範囲および精度にどのような制約が想定され<amount>ますか?(たとえば、<amount>常に小数点以下2桁が常にある場合に可能な最適化がある場合があります。または、ほとんどの通貨が小数点以下3桁を使用する中東支店でプログラムを使用したい場合があります)。
<firstname>、<lastname>両方ともを使用しますがa-zA-Z、タブ文字を決して含まないという単純なステートメントでも、TSVを使用できます。ASCII文字のシーケンスである可能性がある場合は、1文字の区切り文字以外のエスケープまたは区切りの形式が必要です。