Topic: | Tanning Salon |
Source Code: | salon.cpp |
Live Archive Ref#: | 2538 |
In-Class Day: |
Thursday, Nov. 3, 2011 |
Submission Deadline: | Sunday, Nov. 6, 11:59pm |
Techniques: |
Various |
Please review the general information about lab assignments.
For this lab, I have also included the source input and output files which I will test your code on: input file and output file.
Tan Your Hide, Inc., owns several coin-operated tanning salons. Research has shown that if a customer arrives and there are no beds available, the customer will turn around and leave, thus costing the company a sale. Your task is to write a program that tells the company how many customers left without tanning.
The input consists of data for one or more salons, followed by a line containing the number 0 that signals the end of the input. Data for each salon is a single line containing a positive integer, representing the number of tanning beds in the salon, followed by a space, followed by a sequence of uppercase letters. Letters in the sequence occur in pairs. The first occurrence indicates the arrival of a customer, the second indicates the departure of that same customer. No letter will occur in more than one pair. Customers who leave without tanning always depart before customers who are currently tanning. There are at most 20 beds per salon.
For each salon, output a sentence telling how many customers, if any, walked away. Use the exact format shown below.
Example input:
2 ABBAJJKZKZ 3 GACCBDDBAGEE 3 GACCBGDDBAEE 1 ABCBCA 0 |
Example output:
All customers tanned successfully. 1 customer(s) walked away. All customers tanned successfully. 2 customer(s) walked away. |
I'll admit that I picked this problem because, superficially, it seemed like the salon behaves sort of like a stack, or a queue, or a leaky stack, or something along those lines. In reality, none of those abstractions apply. Instead, the only data structure you will need is a raw array, keeping track of which people are tanning, which are tentatively waiting, and which are not there (either because they never show or they came and left). You'll need a few other counters to keep track of the number of customers currently there and the number who walked away without tanning.
Although there are several possible approaches, we suggest the following.
We will rely on the fact that people are represented by the
upper case letters from A to Z and that we can convert those
characters to indices from 0 to 25. Given character value val
the appropriate index is computed as
enum Status {TANNING, WAITING, ABSENT};and then declare your array as
Status customer[26];From this point on, you can assign entries of the array to values, such as setting customer[k] = ABSENT for all customers to initialize a trial. All that's left is to loop through the input string and decide how to accurately update the simulation for each step.