Yeni bankamızın bir vezne işlem sistemine ihtiyacı var ama bir sorun var. Sunucumuzda sadece birkaç yüz baytlık alan var, bu yüzden çok kompakt bir kod yazmanız gerekecek.
Veri tabanı
Neyse ki veritabanımız çok basit (banka başkanımızın okul çocuğu oğlu tarafından inşa edildi) ve şu ana kadar sadece birkaç müşterimiz var.
dosya 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
Uygulama Özellikleri
Banka uygulamamız aşağıdaki komutları uygulamalıdır:
open <firstname> <lastname>
Benzersiz bir 3 haneli hesap numarası yazdırarak yeni bir hesap oluşturur (açar).
withdraw <account> <amount>
Bir hesaptan tutarı çekin.
deposit <account> <amount>
Bir hesaba para yatırma.
close <account>
Boşsa hesabı kapatın.
report <fieldname>
Alan adına göre sıralanmış bir veritabanı raporu yazdırın. Alan adı sütununu ilk konuma taşıyın. Her sütun genişliği, bir boşlukla ayrılmış en geniş veri ve alan adı genişliğinin maksimum değeri olacaktır. İlk satır alan başlıkları olacaktır. Dengeler sadece önde gelen bir $
işaret ile haklı gerekçelendirilmelidir .
print <account>
Alan adlarını yazdırın ve rapor gibi biçimlendirilmiş bu hesap için kaydedin.
Bir kayıt her değiştiğinde, kayıttaki Date
alanın geçerli tarihe güncellenmesi gerekir.
Uygulama, bir komut beklenirken bir "#" istemi gösterecektir. Bir komut başarısız olursa (bilinmeyen bir hesaptaki bir işlem veya yetersiz fon gibi), uygulama bilgilendirici hata iletisini "başarısız" olarak yazdırmalıdır. Program, her değişiklikten sonra değişiklikleri dosyaya geri yazmalı ve tüm dünyada dosya üzerinde eşzamanlı olarak çalışan çok sayıda veznedar programı olduğu için her komuttaki dosyadan okumalıdır (dosya kilitlemeye ihtiyacımız yoktur - performansı düşürebilir).
DÜZENLEME: Dize alanları beyaz boşluk olmadan basit ASCII (az, AZ, -) ve miktar her zaman sentleri gösteren 2 ondalık basamak ile 0.00 ve 1000000000.00 (1 milyar) dolar arasında olacaktır. Tarih her bir şubede yerel saat olacaktır (basit bir çözüm ancak daha sonra bazı sorunlara yol açabilir ...).
Çıktı
Yanıtların spesifikasyonu karşıladıklarını göstermeleri gerekecektir. Lütfen aşağıdaki komutları işledikten sonra programınızdan çıktı ekleyin:
report Balance
open Clark Kent
print 001
deposit 001 4530
withdraw 105 893
close 105
report Date
Bank.data
Yukarıda verilen dosyanın orijinal bir kopyasını kullandığınızdan emin olun .
puanlama
Bu kod golf, bu nedenle puanınız kodunuzun bayt sayısı olacaktır. Standart boşluklar yasaktır.
<firstname>
ve <lastname>
ve aralığı ve hassasiyet <amount>
? (Örneğin, <amount>
her zaman tam olarak iki ondalık basamağı varsa mümkün olan bazı optimizasyonlar olabilir - veya programın çoğu para biriminin üç ondalık basamak kullandığı Orta Doğu şubesi tarafından kullanılabilir olmasını isteyebilirsiniz).
<firstname>
ve <lastname>
her ikisi de sadece kullanmak a-zA-Z
, ama hiçbir zaman sekme karakter içermedikleri basit bir ifade bile TSV kullanımına izin verir. Herhangi bir ASCII karakteri dizisi olabilirlerse, bir karakterlik sınırlayıcıdan başka bir kaçış veya sınırlama biçimi gereklidir.