1. Program Correctness (75%)
    1. Part 2: Race Results (45 points): Deduct 30 points for not using a binary search tree.
      1. Correctness (30 points): Don't worry about formatting here. Just worry about whether or not the correct people and times were printed.
        1. first query (6 points)
        2. last query (6 points)
        3. range mm:ss mm:ss (8 points): For the first mm:ss, only use times that match times in the file. It is okay to use a time that does not match any time in the file for the second mm:ss.
        4. range * mm:ss (3 points)
        5. range mm:ss * (3 points): For the mm:ss, only use times that match times in the file.
        6. range * * (3 points)
        7. quit (1 point)
      2. Output (5 points):
        1. Runners were printed one per line (1 point)
        2. There was one space between each part of the runner's name (2 points)
        3. There were always two digits for the seconds, even if the seconds was a number from 0-9 (2 points)
      3. Error detection (10 points) (2 points each)
        1. Check that the number of command line arguments is correct.
        2. Check that the input file can be opened.
        3. Check that each line of input has exactly three fields.
        4. Check that the format of the time is correct and that the minutes and seconds are both numeric. A time must have one or more digits for the minutes and exactly two digits for the seconds.
        5. Check that a query is correctly formatted and print an appropriate error message if it is not correctly formatted. Your error messages do not need to precisely imitate mine but they should be easily understood by a user.

    2. Part 3: Generic BTree Library (20 points)
      1. bst_find compiles and executes correctly (5 points)
      2. bst_print compiles and executes correctly (5 points)
      3. bst_traverse compiles and executes correctly (10 points)

    3. Part 4: Race Results with the generic BTree library (10 points): Give no credit for this part if the race.c file has not been modified so that it uses the generic BTree library. In particular, it will be necessary to modify the race.c program so that it passes a pointer to a comparison function to new_bstree.

      Don't worry about formatting here. Just worry about whether or not the correct people and times were printed.

      1. first query (2 points)
      2. last query (2 points)
      3. range mm:ss mm:ss (3 points): in addition to the tests used in part 2, also use times for the start of the interval that do not match any time in the file.
      4. range * mm:ss (1 points)
      5. range mm:ss * (1 points): use times for the start of the interval that do not match any time in the file.
      6. range * * (1 points)

  2. In Lab Homework (5%): Did the student make a reasonable effort in answering the questions? If so, assign the full 5 points; otherwise assign a 0.

  3. Commenting (10%): See the commenting information on the course's web page for advice on how to comment your programs,

  4. Program Style (10%): Are the programs well-organized and do they solve the problem in the most straightforward, efficient