ธนาคารใหม่ของเราต้องการระบบการทำธุรกรรมจ่ายเงิน แต่มีปัญหา มีพื้นที่ว่างเพียงไม่กี่ร้อยไบต์บนเซิร์ฟเวอร์ของเราดังนั้นคุณจะต้องเขียนโค้ดที่มีขนาดกะทัดรัดมาก
ฐานข้อมูล
โชคดีที่ฐานข้อมูลของเรานั้นง่ายมาก (มันถูกสร้างโดยลูกชายนักเรียนของประธานธนาคารของเรา) และเรามีลูกค้าเพียงไม่กี่คนเท่านั้น
ไฟล์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 ไปที่ตำแหน่งแรก ความกว้างแต่ละคอลัมน์จะเป็นค่าสูงสุดของข้อมูลที่กว้างที่สุดและความกว้างของฟิลด์โดยคั่นด้วยช่องว่างหนึ่งช่อง บรรทัดแรกจะเป็นชื่อฟิลด์ ยอดคงเหลือจะต้องเป็นธรรมที่ถูกต้องด้วย$เครื่องหมายนำ
print <account>
พิมพ์ชื่อฟิลด์และบันทึกสำหรับบัญชีนี้ที่มีรูปแบบเหมือนกับรายงาน
ทุกครั้งที่มีการเปลี่ยนแปลงระเบียนDateเขตข้อมูลในระเบียนจะต้องปรับปรุงเป็นวันที่ปัจจุบัน
แอปพลิเคชันจะแสดงพรอมต์ "#" เมื่อรอคำสั่ง หากคำสั่งล้มเหลว (เช่นการดำเนินการในบัญชีที่ไม่รู้จักหรือเงินไม่เพียงพอ) แอปพลิเคชันจะต้องพิมพ์ข้อความแสดงข้อผิดพลาด "ล้มเหลว" โปรแกรมจะต้องเขียนการเปลี่ยนแปลงกลับไปที่ไฟล์หลังจากการเปลี่ยนแปลงแต่ละครั้งและอ่านจากไฟล์ในแต่ละคำสั่งเนื่องจากมีโปรแกรม teller จำนวนมากทั่วโลกที่ทำงานบนไฟล์พร้อมกัน (เราไม่จำเป็นต้องล็อคไฟล์ - ซึ่งอาจลดประสิทธิภาพ)
แก้ไข:ฟิลด์สตริงเป็น 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 ได้รูปแบบการหลบหลีกหรือการคั่นอื่นที่ไม่ใช่ตัวคั่นแบบอักขระเดียวจำเป็นต้องใช้