हमारे नए बैंक को टेलर लेनदेन प्रणाली की आवश्यकता है लेकिन एक समस्या है। हमारे सर्वर पर केवल कुछ सौ बाइट्स शेष हैं, इसलिए आपको बहुत कॉम्पैक्ट कोड लिखना होगा।
डेटाबेस
शुक्र है कि हमारा डेटाबेस बहुत सरल है (यह हमारे बैंक अध्यक्ष के स्कूल के बेटे द्वारा बनाया गया था), और हमारे पास अब तक केवल कुछ ग्राहक हैं।
फ़ाइल 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>
फ़ील्डनाम द्वारा सॉर्ट किए गए डेटाबेस की एक रिपोर्ट प्रिंट करें। फ़ील्डनाम कॉलम को पहले स्थान पर ले जाएं। प्रत्येक स्तंभ की चौड़ाई, एक स्थान द्वारा अलग किए गए व्यापक डेटा और फ़ील्ड नाम चौड़ाई की अधिकतम होगी। पहली पंक्ति क्षेत्र के शीर्षक होंगे। संतुलन केवल एक प्रमुख $संकेत के साथ सही होना चाहिए ।
print <account>
फ़ील्डनाम प्रिंट करें और रिपोर्ट की तरह इस खाते के लिए रिकॉर्ड करें।
जब भी कोई रिकॉर्ड बदला जाता है, तो रिकॉर्ड में मौजूद Dateफ़ील्ड को वर्तमान तिथि तक अपडेट किया जाना चाहिए।
एप्लिकेशन को कमांड का इंतजार करते समय "#" संकेत दिखाई देगा। यदि कोई आदेश विफल रहता है (जैसे कि किसी अज्ञात खाते या अपर्याप्त धन पर एक ऑपरेशन), तो आवेदन को सूचनात्मक त्रुटि संदेश "विफल" होना चाहिए। प्रोग्राम को प्रत्येक परिवर्तन के बाद फाइल में वापस परिवर्तन लिखना चाहिए, और प्रत्येक कमांड पर फाइल से पढ़ना चाहिए क्योंकि दुनिया भर में कई टेलर प्रोग्राम हैं जो फ़ाइल पर समवर्ती रूप से काम कर रहे हैं (हमें फ़ाइल लॉकिंग की आवश्यकता नहीं है - जो प्रदर्शन को कम कर सकता है)।
EDIT: स्ट्रिंग फ़ील्ड सफेद स्थान के बिना सरल ASCII (az, AZ, -) हैं और राशि हमेशा 2 दशमलव स्थानों के साथ 0.00 और 1000000000.00 (1 बिलियन) डॉलर के बीच होगी जो सेंट का संकेत देते हैं। तारीख प्रत्येक शाखा में स्थानीय समय पर होगी (एक सरल समाधान लेकिन बाद में कुछ समस्याएं हो सकती हैं ...)।
उत्पादन
उत्तर को प्रदर्शित करने की आवश्यकता होगी कि वे विनिर्देशन को पूरा करते हैं। कृपया निम्न आदेशों को संसाधित करने के बाद अपने प्रोग्राम से आउटपुट संलग्न करें:
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 वर्णों के किसी भी क्रम में हो सकते हैं, तो एक-चार परिसीमन के अलावा भागने या परिसीमन करने का कुछ रूप आवश्यक है।