CS202 -- Lab 0

The purpose of this lab is to give you practice using the grading scripts that you will use in your homeworks, and the submission script for labs. The intent is for you to finish it in lab; however, if you don't you have time to finish it in lab, then finish it on your own, and submit it on your own. After this in-class lab, you'll be doing topcoder in lab.

The program that you should write: How much gold -- src/gold.cpp

This program reads a "map" on standard input. It's really a text file in the following format: For example, the following map in data/map1.txt contains a lot of dirt, but it also contains one rock with nothing under it, and three rocks with gold: one ounce (A), three ounces (C) and 26 ounces (Z).

...............
..-............
.........A.....
..Z.........C..

Your job is to write a program called src/gold.cpp, which reads a map on standard input and prints the total ounces of gold on the map.

There is an example executable in the lab directory, in bin/gold. Try it out:

UNIX> cd /home/jplank/cs202/Lab0
UNIX> bin/gold < data/map1.txt
30
UNIX> cat data/map2.txt
ABCDE.
.F----.
--...........G
UNIX> bin/gold < data/map2.txt
28
UNIX> 

Starting on your lab

I would do the following things to start your lab: First, create an account on www.bitbucket.org, and create a repository named cs202. Make it private, and add the TA's to the repo so that they can pull your code. Now, on the lab machines:
UNIX> cd
UNIX>                     # Clone the repo -- you get the command from the repo's web page.
UNIX>                     # Make sure it's named "cs202". You can rename the directory after you've cloned it.
UNIX> chmod 0700 ~/cs202                 # Protect the directory so others can't see it. 
UNIX> cd ~/cs202                         # Enter the directory
UNIX> mkdir lab0                         # Make a directory for the lab
UNIX> cd lab0                            # Enter the directory
UNIX> mkdir src                          # Make a directory for code
UNIX> mkdir bin                          # Make a directory for executables
UNIX> cp ~jplank/cs202/Lab0/makefile .   # Copy the lab's makefile
UNIX> cp ~jplank/cs202/Lab0/.gitignore . # This is useful -- ask the TA's
UNIX> touch src/gold.cpp                 # Create the file src/gold.cpp
UNIX> touch bin/.keep                    # When you do this, git won't ignore the bin directory
UNIX> git add .* * src/* bin/.keep       # Add all of the new files to the repository
UNIX> git commit                         # Commit the files
UNIX> git push                           # Copy them all over to bitbucket
You'll be able to compile with make. When you're done writing and testing src/gold.cpp, do:
UNIX> git commit -a                  # This commits all files that have changed since the last commit.
UNIX> git push                       # This copies the files over to bitbucket
Your TA should be able to pull, compile and run your code.

Testing and Grading for Correctness

There are two programs that you should use for testing and grading. The first is gradescript. You can call it from the lab directory, and you call it with a number between 1 and 100. This will execute your gold program. You need to have your gold executable in the current directory, and call the gradescript as follows:
UNIX> /home/jplank/cs202/Labs/Lab0/gradescript 1
Problem 001 is correct.

Test: ./bin/gold < /home/jplank/cs202/Labs/Lab0/Gradescript-Examples/001.txt
UNIX> 
The gradescript is saying that test #1 worked correctly. The test that it ran was:
UNIX> ./bin/gold < /home/jplank/cs202/Labs/Lab0/Gradescript-Examples/001.txt
1
UNIX> 
You can examine the input file with cat or more, or even vi:
UNIX> cat /home/jplank/cs202/Labs/Lab0/Gradescript-Examples/001.txt
A
UNIX> 
Let us suppose that you made a mistake writing bin/gold, and that instead it is a program that always prints "1":
UNIX> cat src/retone.cpp
#include <iostream>
using namespace std;

int main()
{
  cout << "1\n";
  return 0;
}
UNIX> g++ -o bin/gold src/retone.cpp
UNIX> 
When you run problem one on it, it works fine, because "1" is the proper output for the first problem. However, it fails on problem 2:
UNIX> /home/jplank/cs202/Labs/Lab0/gradescript 1
Problem 001 is correct.

Test: bin/gold < /home/jplank/cs202/Labs/Lab0/Gradescript-Examples/001.txt
UNIX> /home/jplank/cs202/Labs/Lab0/gradescript 2
Problem 002 is incorrect.

Your standard output does not match the correct one.

TEST:

bin/gold < /home/jplank/cs202/Labs/Lab0/Gradescript-Examples/002.txt

FILES:

Your standard output is in tmp-002-test-stdout.txt.
Your standard error  is in tmp-002-test-stderr.txt.

The correct standard output is in tmp-002-correct-stdout.txt.
The correct standard error  is in tmp-002-correct-stderr.txt.

Look at correct files and your files, perhaps run 'diff -y' on them, and figure out your mistake.
Please remember to delete this files when you are finished.
UNIX> 
You can examine your output and the proper output in the files listed:
UNIX> cat tmp-002-test-stdout.txt
1
UNIX> cat tmp-002-correct-stdout.txt
30
UNIX> cat /home/jplank/cs202/Labs/Lab0/Gradescript-Examples/002.txt
...............
..-............
.........A.....
..Z.........C..
UNIX> 
That way, you can try to find your errors. In most cases, your output must match mine exactly. That can be a challenge.

The script gradeall checks your programs in 100 test cases:

UNIX> /home/jplank/cs202/Labs/Lab0/gradeall
Problem 001 is correct.
Problem 002 is correct.
Problem 003 is correct.

...

Problem 099 is correct.
Problem 100 is correct.

100 Correct out of 100
UNIX> 
When you have written src/gold.cpp correctly, you may submit it. The Lab TA's will tell you how to submit it. Don't worry about commenting this one -- it's just for practice, and writing it simply gets you attendance for the lab.