Course Home | Course Policies | Homework | Lab Open Hours | Programming | Labs | Schedule & Lecture Notes


Lab Assignment 6

Topic: Tanning Salon
Source Code: salon.cpp
Live Archive Ref#: 2538

In-Class Day:

Tuesday, March 8, 2011
Submission Deadline: Friday, March 11, 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.


Tanning Salon

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.


Hints

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 val - 'A'. Our primary structure will be an array with an entry for each possible customer. There are three possible states for a customer: tanning, waiting, or absent. You can either use an array of integers, using values 0, 1, and 2 to distinguish. Even better for readibility is to use an enumerated type. First declare

   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.

Pre-lab

What would the output be if the following was entered:
3 ABCABCDEFFED
2 ABCABCDEFFED
0