From b6e77af7fd171a6dfc1140d0f986da7ac4a54b1d Mon Sep 17 00:00:00 2001
From: Porter Jones <pbjones989@gmail.com>
Date: Sun, 19 May 2024 21:47:04 -0700
Subject: [PATCH] Update hw9 spec and tarball

---
 src/homework/hw9/hw9.tar.gz | Bin 1934 -> 1968 bytes
 src/homework/hw9/index.md   |  40 ++++++++++++++++++++++++------------
 2 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/src/homework/hw9/hw9.tar.gz b/src/homework/hw9/hw9.tar.gz
index bc28459023d4714fd4947acd99ebd3fe991da78d..15cc0384ed3cc6071836584dc1eefda088449e0b 100644
GIT binary patch
literal 1968
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
CmiqPp

literal 1934
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
USXfwCSey!f0Fpp9PXJH=083refB*mh

diff --git a/src/homework/hw9/index.md b/src/homework/hw9/index.md
index 249f0b22..c997a1ee 100644
--- a/src/homework/hw9/index.md
+++ b/src/homework/hw9/index.md
@@ -18,7 +18,7 @@ tar -xzf hw9.tar.gz
 
 This assignment focuses on Bash shell scripting. Electronically turn in file `autograder.sh` as described in this document.
 
-For this assignment, you will write a script `autograder.sh` that "grades" solutions to a hypothetical homework assignment. You're given a set of students' solution files, each of which is supposed to be named `task1.sh` (though some students used the wrong file name...), and your script will run each of them one at a time, examining the output to see if it matches the expected output. Here is one example output (after calling the script by typing in `./autograder.sh 50` into your shell):
+For this assignment, you will write a script `autograder.sh` that "grades" solutions to a hypothetical homework assignment. You're given a set of students' solution files, each of which is supposed to be named `task1.sh` (though some students did not submit the assignment correctly...), and your script will attempt to run each of them one at a time, examining the output to see if it matches the expected output. Here is one example output (after calling the script by typing in `./autograder.sh 50` into your shell):
 
 
 ```
@@ -56,8 +56,9 @@ To get started, download the `hw9.tar.gz` from the course web site which should
     students/zorahf/task1.sh
     ```
 
-    Each student's directory is supposed to contain a file representing that student's homework solution (though some
-    students have not turned in the file properly, so it may not exist or may have the wrong name).
+    Each student's directory is supposed to contain a file representing that student's homework solution.
+    Some students submitted the assignment incorrectly (e.g. `oterod` in the above list) and will
+    not receive credit for the assignment.
 
     Note that you are not targeting the specific students shown above; your code should not specifically mention names like `zorahf` or `joshue`. Your code should process all students in the students directory, and we will test you with different `students/` directories.
 
@@ -103,10 +104,11 @@ For *each* student in the `students/` folder, you should:
   - you should manually invoke bash to run them, i.e. `bash ./task1.sh`
 2. capture the file's output and compare it against the expected output file using `diff`, **ignoring whitespace**.
 3. count the number of lines that do not match to calculate the student's score (see below for more).
-4. output three lines for each student:
-    1. a "correctness" line
-    2. a score line
-    3. a blank newline
+4. output four lines for each student:
+    1. a "processing" line
+    2. a "correctness" line
+    3. a score line
+    4. a blank newline
 
 !!!tip "Hint"
         Is there a flag for `diff` that ignores whitespace?
@@ -120,10 +122,19 @@ For *each* student in the `students/` folder, you should:
 
 For each unmatched line, deduct 5 points from the student's score. For example, if the `diff` output has 4 lines that have `<` or `>`, the student should lose 20 points. **If the student loses more points than there are points in the assignment, the student should receive 0 points.**
 
+### Output format: Processing
+
+The first line you should output for each student is an informational message.
+The format should be `Processing <student ID> ...`.
+Be sure to match the spacing exactly!
+
+```
+Processing joshue ...
+```
 
 ### Output Format: Correctness
 
-The first line you should output for each student indicates the correctness of their solution. There are three possible cases.
+The second line you should output for each student indicates the correctness of their solution. There are three possible cases.
 
 If the student `joshue` has a fully correct solution (no issues), output the following in this **exact** format (including whitespace and capitalization):
 
@@ -145,14 +156,15 @@ lewis did not turn in the assignment
 
 ### Output Format: Score
 
-Next, output the student's score. The format for this is the same regardless of the student's correctness; the only thing that changes is the score value.
+The third line of the output should be the student's score.
+The format for this is the same regardless of the student's correctness; the only thing that changes is the score value.
 
 For example, assume that the maximum score is `50`.
 
-If a student `jones` has no differing lines of output, the score output for that student would be (in this **exact** format, including spacing):
+If a student `belcher` has no differing lines of output, the score output for that student would be (in this **exact** format, including spacing):
 
 ```
-jones has earned a score of 50 / 50
+belcher has earned a score of 50 / 50
 ```
 
 If student `davis` has 3 differing lines of output (-15), the score output would be (in this **exact** format, including spacing):
@@ -161,7 +173,8 @@ If student `davis` has 3 differing lines of output (-15), the score output would
 davis has earned a score of 35 / 50
 ```
 
-If the student `smith` did not submit the assignment, the score output would be (in this **exact** format, including spacing):
+If the student `smith` did not turn in the program or incorrectly named the file,
+the score output would be (in this **exact** format, including spacing):
 
 ```
 smith has earned a score of 0 / 50
@@ -178,7 +191,8 @@ You may assume that:
 
 You may not assume that:
 
-- every student has a file exactly called `task1.sh`
+- the `students` directory is not empty
+- every student has submitted a file called `task1.sh`
 - every student's `task1.sh` is executable (however, manually invoking `task1.sh` with `bash` partially resolves this)
 - each submission outputs the same number of lines as `expected.txt`
 - each submission has correct, working shell code
-- 
GitLab