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 zcmV;h2T%APiwFP!000001MOQ|ciXrT&TI86CeA}%ESguT-d=o?-R-XTY}<5`bM~R9 z;Q>idL`(uK07_wheFwbQmMmM+9+_$yes&@o*8zt3W;g?9tILZQ&kP$e4+8V)%me%W zXO9<-KXcu{_g&k?^7(8&djY|73uaI$O(ejJGWzsnyIu8PC^FQ)(p5saR?qby9Hf62 z_3t=A;Eeho0&Dt@BAUk;l}COM_R_yM^PIqSy}5(>_dI7l>VF7q*S{v}#<5g(oH=&s z-}eI4e=u`>cjh7S+m1hXkpJ!DO#d{#a{a%0c@Z&w5fPP5UctBTzX$KqK8N?Zf?w!@ zs>y`LnSisuh)RNrg`_}u0*Wpvhnf<pfGos07}VmdYYnD##1@c{B&i{iqFQ7cQXzE) zf&=J`DToEvjN_Ac+YJbCx&lr#6a3sXh$&mr1Q>^(Swy9-aUKr%#HQ)_UAIQ2geEK| z8e40D6Hq9nD1~BXtb0wdifABt4h1fO;DTaFn{M>q70Jy~%AC~1I-8tYIRjwr{3ntu z*|FLGK>l}q!~eE7`hSC9oBm@_6nLQ2vF6yJf5(|QoBThsoss{Cz&iiG6G9>_p2IaH zg1^>q!^H|R{D+j92;^X1eYUXSucSq0etBCVpK8b{Q5vpa7qAc_F(u|fqK4xaFHIkY zoNIVlQ)0XfKpTQKMT^puC~SpOUtRSU=Yug3Oc^OmC&`Qj5tT06*^t0r_N@L_Qb!b6 ziWUg%&O(yJ45nhqO5F{CQ`L=Jw^rl&HHx#KIMRyLuwrPLn6|pwzD<fdk<q*~6Sr-C zsiL|uH}7hlp^;jb0VOqK;mA3TTu@vdi*L}%h>9oO;9ZAzLMayI^?K>wIR%lLaTG=C zSt}F(%~PJ&pfXYAiP>h!;U}^r>phJYm{~3;G=Ik6-tNyeilof)U`5g1;byl>SP7m` znO3<`FIr37xx$#*oZV0`j|7gkKFP0*2+b<H1xh;A1e-g)2dj+b6h6E$yU+AhKmCtI zVOjk+r+(l^tYI7fAJ_Ze!~gdm@W1c*BmWP9{k;1-&whtvzum9j!>ix)>GyT$cRBOD zE8i1gLv1L#p(ue|OFwH#u#{5^nHK3U79ww3nW3$-Q!D71v3CAH36)j!wEn;EHU7UJ zjQ;-+*rxx%`G4*`;D3KU^8XNcB>wZ3a{NYiE^es4Aq?vpf4p}R6G0W^LM!8}E)3-w z>gNk(?He%q@=eOARd*DuoqwUJ6v=7%f98(-KOna0|HGS;^S|eh@&7?E^8d*Hx99&q zLXs>!DgXO+(DJ`M^8XOnrvGP&|2xj3@qgd3H~Bx9+av!Ef&2WQE4Ww^+0vjA$mSQ{ zw7*#0NB?<kk;2MYf{%?=lwMmJNv1iiLsc4<pGG9AL&0fSpbZE$E9j$5g(y|X!iCUb zDd~a}u0ygQ?B3vUC29LpL6F=-rD<7CO=*ahB3vP7hlJ%SL~6e6#F<<YPNs~9Q7%Mr zSECACFxsoItcvo6aW!===a)~_vyc>KId^UD?~@T^`(BxvX-ZVgT4RNhOG@?n%BHDg z38_O?geYq+mUN@u6q%XsiqUw5rplUHk*JlGpoO$zS#QeMS!{LjEs@qIvLqYD-$}Ci z*(l(#%J&&5X;(X8Df|<r6yAxI73V}L_}3qdD17p}rl$uV!G}MA=XV8;jU^tIIJVap znMSTD^4zY-$C4SA__ImM?q(sJ6(m=d{;W6V`Nuck84sk%_q44bBJu`=N&kpdes#6p zkm;_x8NU_PxeR9QkB<BQVa$I6w(<Yq@gLiN82=AO{vQIZ%lkKz;cfG+jaRI+koB$K zjIJ<=Oae3$tG=+PA!jKC<ZMWDR+h%4t|X^P-=ZoNODMi6toT|A@%nYr#n+L<Oy-b4 z!FZ)<-|-Ww1kfe#QobmUq-#lAP4PcG`b}c`8X_8#f_C0K!xw?u7mF0f);K@JxCRvP zEzRK#lV=lro%#3?Ug6iD!#{qtXWwA${I77ENPP4Jz<&P!{qyfRbAR;zhrm|-8+TyJ zrU^^9o+e_7M{A0<o-Me!&SA{)L30=d&wPJ>{ku*OjQl?cw(6f2rLGTF^P@Oe|4v}f z#`|A`U?cxW@jYpE8vgI%|6Y^-b)7N(GYGco|HuKL9r{PIf8hVm$MZi7*5m*Ewa@P2 zrUmVt7%fD5FDAwJ>*iX_6S1OwLMOYzFOLUq4v7BTg^UglHysem+8zwM4V66^E7~2z zc_jL?SJ3FGsMA*YP7^Eoz4I_uWZMsdMYGGzV3B>ff4Jzni2)H5=7ttcR*7h!OOfNw zLMlZ8KbZIs!%kOUQ;caV{~tL3w9Ebn?t}RM%pUK54uVJWzds2IZ}Cxh&b+S@&HeZ) zO#x}6q}+s%%(3k9t-mSNivpWzP0Xmt-8PdL)^6^2s{YTw)^fpJDi{|@`&=-<{cJG4 z7NI%B;X29ML~x%6HdE%gv7Gef|Ku5e3g-ON&n1m<S;u?hTgR^VKhM7R_n$N4|GVyZ z|8E%VKCY94?q^I6IIWXiH!>#sUB&p~4&8_mBSwrEF=E7s5hF&N0RIK3HZNxYPyhh7 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