- Homeworks (60%):
There will be weekly homeworks with both written and programming parts.
Each homework is centered around an application and will also deepen your understanding of the theoretical concepts.
Some homeworks will have a competition component; winners will receive extra credit.
Here are all the homework deadlines:
- Exam (20%): The exam is a three-hour written exam that will
test your knowledge and problem-solving skills on all preceding lectures and homeworks.
You cannot use any external aids
except one double-sided page of notes.
If you have a major conflict (e.g., an academic conference),
submit a request to take it at another (earlier) time.
Your request must be submitted by Thurs Oct 31.
Date: Tuesday, November 19, 6:15 - 9:15 PM (PST)
Location: last name A-K: Hewlett 200, L-S: Cubberley Aud, T-Z: 420-040
For SCPD students, your exams will be distributed through the SCPD office once you have set up an exam monitor.
- Project (20%): The final project provides an opportunity for you to
use the tools from class to build something interesting of your choice.
Projects should be done in groups of up to three.
The project will be something that you work on throughout the course and we have set up some milestones
to help you along the way:
See the project page for more details.
Regardless of the group size, all groups must submit the same basic amount of work as detailed in each milestone.
Of course, the experiments may not always be successful,
so we will cut the smaller groups more slack,
while larger groups are expected to be more thorough in their experiments.
For inspiration, we have made some previous CS221 projects available for viewing.
You will be awarded with up to 2% extra credit
if you answer other students' questions in a substantial and helpful way.
Homeworks should be written up clearly and succinctly; you may lose points if your answers
are unclear or unnecessarily complicated.
Here is an example
of what we are looking for.
You are encouraged to use LaTeX to writeup your homeworks
(here's a template
), but this is not a requirement. You will receive
one (1) bonus point
for submitting a typed written assignment (e.g. LaTeX, Microsoft Word).
We will accept scanned handwritten assignments but they will not receive the bonus point.
The grader runs on Python 3, which is not guaranteed to work with older versions (Python 2.7).
Please use Python 3
to develop your code.
The programming assignments are designed to be run
in GNU/Linux environments.
Most or all of the grading code may incidentally work on other
systems such as MacOS or Windows, and students may optionally
choose to do most of their development in one of these alternative
environments. However, no technical support will be provided for
issues that only arise on an alternative environment. Moreover,
no matter what environment is used during development, students
must confirm that their code (specifically, the student's
submission.py) runs on Gradescope,.
The submitted code will not be graded if it has one of the following issues:
- The original
grader.py script (operating on the
submission.py) may not exit normally
if you use calls such as
Also note that Python packages outside the standard library are not guaranteed to work. This includes packages like numpy, scikit-learn, and pandas.
- The code reads external resources other than the files given in the assignment.
- The code is malicious. This is considered a violation of the honor code.
The score of the assignment will be zero (0) and the incident will be reported to the Office of Judicial Affairs.
Collaboration policy and honor code:
You are free to form study groups and discuss homeworks and projects.
However, you must write up homeworks and code from scratch independently, and you must acknowledge in your submission all the students you discussed with.
The following are considered to be honor code violations:
- Looking at the writeup or code of another student.
- Showing your writeup or code to another student.
- Discussing homework problems in such detail that your solution (writeup or code) is almost identical to another student's answer.
- Uploading your writeup or code to a public repository (e.g. github, bitbucket, pastebin) so that it can be accessed by other students.
- Looking at solutions from previous years' homeworks - either official or written up by another student.
When debugging code together, you are only allowed to look at the input-output behavior
of each other's programs (so you should write good test cases!).
It is important to remember that even if you didn't copy but just gave
another student your solution, you are still violating the honor code, so please be careful.
We periodically run similarity-detection software over all
submitted student programs, including programs from past quarters and any
solutions found online on public websites.
Anyone violating the honor
will be referred to the Office of Judicial Affairs.
If you feel like you made a mistake (it can happen, especially under time
pressure!), please reach out to the instructor or the head CA;
the consequences will be much less severe than if we approach you.
All assignments are due at 11pm (23:00, not 23:59) Pacific time
on the due date.
Assignments are submitted through Gradescope
. Do not submit your assignment via email. If anything goes wrong, please ask a question on Piazza or contact a course assistant.
If you need to sign up for a Gradescope account, please use your @stanford.edu email address.
You can submit as many times as you'd like until the deadline: we will only grade the last submission.
Submit early to make sure your submission runs properly on the Gradescope servers.
Gradescope will run
on the programming questions and give you feedback on non-hidden test cases.
You are responsible for checking that your program runs properly on these cases. You will not get credit otherwise.
If anything goes wrong, please ask a question on Piazza or contact a course assistant.
Do not email us your submission.
Partial work is better than not submitting any work.
For assignments with a programming component, we will automatically
sanity check your code in some basic test cases, but we will grade
your code on additional test cases.
Important: just because you pass the basic test cases, you are by no
means guaranteed to get full credit on the other, hidden test cases, so you should
test the program more thoroughly yourself!
Unless the assignment instructs otherwise, all of your code modifications
should be in
submission.py and all of your written answers
<assignment ID>.pdf. Upload the former to Gradescope
under the "Programming" section, and the latter under the "Written" section.
For the project milestones, make sure the all members of your
group submits. The submission should include a
group.txt file which should contain the SUNetIDs of the entire
group, one per line.
An assignment is $\lceil d \rceil$ days late if it is turned in $d$ days past the due date (note that this means if you are $1$ second late, $d = 1$ and it is 1 day late).
You have seven (7) late days
in total that can be distributed among the assignments (except for p-poster, p-peer, and p-final)
without penalty. After that, the maximum possible grade is decreased by 25% each day (so the best you can do with $d = 1$ is 75%).
As an example, if you are out of late days and submit one day late, a 90 will be capped at a 75, but a 72 will not be changed.
Note that we will only allow a max of $d = 2$ late days per assignment, though, so if $d > 2$ then we will not accept your submission.
Gradescope is set up to accept written and programming submissions separately.
Late days are calculated per-assignment, with the number of late days used depending on the later submission.
So, if the programming part is $1$ day late and the written part is $2$ days late, then that will count as using $2$ late days.
Regrades: If you believe that the course
staff made an objective error in grading, then you may submit a
regrade request for the written part of your assignment. Remember
that even if the grading seems harsh to
you, the same rubric was used for everyone for fairness, so this
is not sufficient justification for a regrade.
It is also helpful to cross-check your answer against the released solutions.
If you still choose to submit a regrade request, click the corresponding
question on Gradescope, then click the "Request Regrade" button at the
Any requests submitted over email or in person will be ignored. Regrade requests for a
particular assignment are due by Sunday 11:59pm, one week after the
grades are returned. Note that we may regrade your entire submission,
so that depending on your submission you may actually lose more points
than you gain.