CS314 - Assignments Computer Science 314 - Spring 2022 Assignment Schedule and Guidelines Assignment Number Approximate Release Date Due Date Always due by 11 pm Topic 1 Friday, January 7 Thursday, January 27 Code camp, warm up assignment. (Individual Assignment) 2 Wednesday, January 26 Thursday, February 3 Creating a stand alone class - Mathematical Matrices (Individual Assignment) 3 Wednesday, February 2 Thursday, February 10 Implementing a program with multiple classes, using ArrayLists - The Name Surfer (Individual Assignment) 4 Wednesday, February 16 Thursday, February 24 Using Data Structures - Evil Hangman (Individual Assignment) 5 Wednesday, February 23 Thursday, March 3 Linked lists (Individual Assignment) 6 Wednesday, March 2 Thursday, March 10 Recursion (Pair Assignment) 7 Wednesday, March 9 Thursday, March 24 More recursion, Anagram Solver (Individual Assignment) 8 Wednesday, March 23 Thursday, April 7 Abstract Classes, Inheritance, Interfaces, Iterators, Polymorphism, Sorting, Searching, Using Lists - Implementing a Set class (Pair Assignment) 9 Wednesday, April 6 Thursday, April 14 Binary Search Trees 10 Wednesday, April 13 Thursday, April 21 Huffman Coding (Pair Assignment) 11 Wednesday, April 20 Monday, April 28 Graph Algorithms General assignment requirements. Programming Assignments: Individual assignments are to be completed on your own. You may not share solution code or experiment code with other students or other programmers. You may not use solutions obtained from the web. Review the class policy on improper collaboration from the class syllabus and how this applies to individual assignments. A few of the assignments may be done in pairs using a technique called pair programming (Read the paper on pair programming to understand how the technique works.). Turn in one solution for the pair. (Submit the assignment to one partners Canvas account.) Once you start working with a partner on an assignment you may not switch partners. If you do not wish to work with a partner after starting on an assignment you must both complete it individually. You must inform your TA(s) via email if you start working on an assignment with another person and decide to finish as individuals. You may not re-pair after starting the assignment with someone else. You may NOT start working on on your own and then start working with another person. When working on pair programming assignments you are expected to spend at least 80% of your time on the assignment working with your partner, together at one computer, taking terms typing, and navigating. If you are retaking CS314 you must start from scratch on assignments unless you worked alone on the assignment in previous semesters and are working alone this semester. You may not reuse code from a partner from previous semesters and you may not use code you created in a previous semester with a partner this semester. It is your responsibility to turn in the right thing, in the right format, on time. Failure to meet your responsiblities will lead to consequences, typically the loss of significant points on the assignment. Program Hygiene and Best Practices (The CS314 Style Guide): "The cleaner and nicer the program, the faster it's going to run. And if it doesn't, it'll be easy to make it fast." - Joshua Bloch "Code is read more often than it is written. Code should always be written in a way that promotes readability." - Guido van Rossum "It's a long-standing principle of programming style that the functional elements of a program should not be too large. If some component of a program grows beyond the stage where it's readily comprehensible, it becomes a mass of complexity which conceals errors as easily as a big city conceals fugitives. Such software will be hard to read, hard to test, and hard to debug." - Paul Graham Follow the guidelines of the program hygiene guide. Most assignments have 6 to 10 points devoted towards how well your code is written and how well it adheres to our program hygiene and best practices guide. Programs must be written in Java, using the Java 2 Platform Standard Edition 8.0 or a later version of Java but limiting yourself to the features of Java 8. Assignments are due by 11pm on the due date., You have 8 slip (late) days in 1 day units (1 second to 24 hours = 1 day) for the semester. You may divide your slip days across the assignments in any way you wish to extend deadlines for the assignments except you may not use more than 2 slip days on a single assignment. On pair programming assignments (See above for more information), both members of a pair use their own slip days, and both must have the required number of slip days. If both students do not have the required number of slip days it is a 0 for both students. You may not use slip days to turn an assignment back in for a re-grade. Weekends and vacation days do not stop the slip day clock. For example if an assignment is due on Thursday the last day you may turn it in is the Saturday just after the due date. If you turn in an assignment late and do not have the required number of slip days, the assignment score is 0. To help the TA track your slip-day status you will complete the slip day portion of the appropriate comment in your source code file you turn in. Assignments must compile and run from the command line in the GDC Microlab. When testing and grading your program we will use the CS department Linux machines and the command line. We will not use any particular IDE. To ensure your programs work you can transfer your source code (.java files) to your CS department account and then compile and run them from the command line. See this page for more help. You can move the program to a CS machine in many ways and log into one of the lab computers to test it. Alternatively, SSHing into a CS department machine requires you to set up SSH keys on your remote system (laptop, desktop) and your CS department account. See this page for help with Windows and this page for help with Linux and Macs. Assignments will require you to turn in multiple files. You will turn in a single zip file that contains all required files. This must be a flat zip file with no internal directory structure. Assignments that are not in the correct format or not named correctly will be penalized as described below. Assignments must be turned in via Canvas and must be turned in to the correct assignment. You must turn in a file with the correct name and in the proper format. If you do not follow the instructions and specifications for assignments (name, where to turn in, zip file format) you cause extra work for the graders and myself. As a student and potential software developer you must follow instructions and specifications. When you fail to follow instructions it causes special cases which require precious time to handle. Realize there are hundreds of students in this course and only a few TAs. We use scripts to streamline some aspects of grading. Failure to follow the assignment instructions and specifications causes these scripts to fail and the graders must spend more time on your submission. The following penalties are in place because there must be consequences for failure to follow instructions. Please read this account of a student who has seen the issue from both sides. If you fail to follow the instructions for turning in assignments you will likely lose all points. Specific penalties for failure to follow instructions and specifications on assignments: Class names must match the required class names or our scripts cannot compile them. Classes not named correctly lose all correctness points. Note, if you turn in the assignment multiple times via Canvas, Canvas renames your zip file by appending digits, -1 for the second submission, -2 for the third submission. You do NOT need to worry about the cruft Canvas adds to your file submissions if submit multiple times. Our grading scripts deal with this gracefully. Classes must be in the default package (no package statement) unless otherwise specified. You lose all correctness points if you put a package statement in your program. An assignment that does not compile or does not run, loses all correctness points. Follow all instructions for the assignment so that our automated testing framework can compile, run, and test your program. This include naming classes and methods correctly and not using classes or methods that are not part of the standard Java 8 API. Another common issue is importing non standard Java classes or classes not in the version of Java we have on the CS machines. For example import apple.laf.JRSUIUtils; That is not a standard Java classes. Standard Java classes being with java. or javax. Your program must work using the version of Java as installed on the CS department machines. There may be multiple versions of your program on your computer. We will grade what you turn in. If you turn in the wrong file (for example the original shell provided by the instructor with no changes) your grade will suffer accordingly. Most likely a 0. (Screen shots with time stamps of "last modified" from your system are proof of nothing. It is trivial to change the system time on computers or to Photoshop "evidence".) Likewise if we ask for the source code, the .java file, and you turn in the .class file your grade will be 0. You must add the header and fill it in for every file you turn in or you may lose points. You may not use disallowed classes, methods, or programming constructs. 2 points off per occurrence. Any data files shall be in the same directory (current working directory) as the running program. If you add any path information to a data file, you program will very likely not work when we test it and all correctness points shall be lost. On pair assignment if you do not correctly add the header information for each student, then only the student that turns in the assignment will get credit. Assignments grades are not scaled to effort or time spent working on them. You may spend a large amount of time working on an assignment and still lose many points because your program is not correct or your program hygiene does not follow the CS314 standards. The programs are not graded on a strictly linear scale. Points are deducted for failed test cases, poor program hygiene, poor efficiency, lack of necessary comments, convoluted algorithms, lack of student provided test cases, lack of answers to questions regarding the assignment, and other reasons deemed appropriate by the teaching staff. Assignments will be checked for plagiarism and copying using Moss. You may discuss high level design issues with your fellow students, but sharing algorithms in any form or code, discussing the problems at such a level of detail that your solutions are essentially the same, or obtaining solutions from another source constitutes academic dishonesty and will result in an F for the course. Review the class policy on academic dishonesty. The teaching staff will grade, comment, return, and post the grade for an assignment within 6 days. A grade can only be disputed within the following 5 days. (This isn't a weekend bazaar. If there is an error in your grade you have one week to contact your grader. We won't go back at the end of the term to look at an assignment from early in the term.) Please do not ask for a regrade lightly. Your grade could in fact go down as a result of the regrade. Do not quibble over a few points. Regrades are for serious issues due to the time required. In the past the vast majority of regrades have resulted in no change in the grade or a lower grade. Please contact your TA if you assignment is not graded in a timely and accurate fashion. All grade disputes must be made in writing by email to the grader with supporting evidence and will result in the entire assignment being re-graded which may result in a lower grade. Testing and Correctness: Testing your solutions is an important part of programming. I will provide some tests with each assignment, some of which may contain errors. You will create additional test cases for it. Programs will be graded using additional test cases created by the teaching staff. I encourage you to use the Piazza discussion group to address which tests of mine are incorrect and to share tests you write to test each others programs. Note, the test cases you turn in must be ones you wrote yourself. You may not copy other students' test cases to turn in. Only for further testing of your solution. Tests may be posted to the class discussion group on Piazza. Delete the provided tests from the version of your program you turn in. Assignments will be checked for correctness with more tests generated by the teaching staff. Your assignment may pass all the provided tests and still be incorrect. Grading test cases will not be published. If you would like to see the test specific test cases your code failed on you must meet with your TA during their office hours to see the test cases. Efficiency: Worry about this last, but your program should run as fast as possible and use as little memory as possible within the constraints of the assignment. If you find yourself needing to increase the stack or heap size of your program you either have a logic error or have taken a very different approach to solving a problem that requires too much memory. Some tests will be based on the length of time it takes your solution to complete and you may fail a test if your solution takes too long. To the CS 314 home page